¿Cómo puede el operador xx en Raku retrasar la evaluación de su operando de código del lado izquierdo?

9

El operador 'xx' es interesante porque:

(^100).pick xx 10

produce una lista de 10 Int aleatorios en lugar de un Int aleatorio repetido 10 veces como una lista.

¿El operador maneja el operador como un caso especial? ¿O es realmente solo otro submarino que también podemos definirnos? (Si es así, estaría muy interesado en saber cómo ...)

Gracias

cowbaymoo
fuente

Respuestas:

10

Sí, este es uno de una gama de operadores que actualmente existen como formas especiales en el compilador. Otros ejemplos incluyen ||y &&, que solo evalúan el lado derecho dependiendo de la boolificación del lado izquierdo.

En la actualidad, no hay una manera de definir un operador de este tipo usted mismo (o al menos, uno no oficialmente compatible; si está preparado para jugar en el compilador interno, todo es posible). Sin embargo, las macros, planeadas para la próxima versión principal del idioma Raku, permitirán esto.

Jonathan Worthington
fuente