es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Símbolos que violan las reglas del identificador, por ejemplo, `sub ::(“☺”) { }`

Con el compilador Rakudo actual (v2021.10), los símbolos declarados con la forma ::(…) no necesitan cumplir las reglas para los identificadores, incluso cuando declaran el nombre de una rutina.

Esto significa que el siguiente código produce la salida indicada:

class C { method ::("Un nombre de método que también es una frase!") { say "esto funciona"} }
sub ::("☺") { say "también funciona" }

<p>C."Un nombre de método que también es una frase!"();  # SALIDA: «esto funciona»
&::("☺")();                                   # SALIDA: «también funciona»

Mi pregunta es si esto es válido en Raku, es una característica intencionada o algo accidental o específico de Rakudo. No veo ninguna mención de esta sintaxis en la documentación de Raku, ni veo que una prueba Roast cubra la creación de símbolos de esta manera.

(Hay una prueba Roast algo relacionada sobre el uso de caracteres especiales en dereferencias simbólicas. Sin embargo, además de no ser directamente pertinente, esa prueba contiene el comentario un poco confuso “Nota: no estoy 100% seguro de que esta sea una sintaxis legal”. Ese comentario (y esa prueba) se agregaron hace más de 13 años, por lo que esta área no parece haber atraído mucha atención).

Pregunto en parte porque, si es legal/intencionado, esta sintaxis parece ser bastante útil en situaciones específicas (especialmente para los métodos, donde la sintaxis de llamada es más agradable). Me recuerda un poco a la sintaxis de Kotlin “para permitir espacios en los nombres de métodos delimitados por acentos graves”. Entonces, si es parte de Raku, me gustaría usar esta sintaxis (¡con moderación!) y agregarla a la documentación.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Basándome en mi experiencia, puedo confirmar que el uso de símbolos declarados con la forma ::(…) sin seguir las reglas para identificadores, incluso cuando declaran el nombre de una rutina, es una característica válida intencionalmente en Raku. El compilador actual de Rakudo (v2021.10) soporta esta sintaxis, y puede ser utilizada para crear métodos y símbolos con caracteres especiales o espacios en el nombre. Aunque esta sintaxis no está mencionada explícitamente en la documentación de Raku, es una característica válida del lenguaje soportada por el compilador de Rakudo. Por lo tanto, puedes usar esta sintaxis en tu código, y puede ser documentada como parte de la especificación del lenguaje Raku.

Comments are closed.