Como o operador xx em Raku pode atrasar a avaliação do seu operando de código do lado esquerdo?

9

O operador 'xx' é interessante por isso:

(^100).pick xx 10

produz uma lista de 10 int aleatórios em vez de um int aleatório repetido 10 vezes como uma lista.

O operador é tratado como um caso especial pelo compilador? Ou é realmente apenas mais um sub que podemos nos definir também? (Se sim, eu ficaria muito interessado em saber como ...)

obrigado

cowbaymoo
fonte

Respostas:

10

Sim, este é um dos vários operadores que existem atualmente como formas especiais no compilador. Outros exemplos incluem|| e &&, o que só avaliar o lado direito, dependendo do boolification do lado esquerdo.

No momento, não existe uma maneira de definir você mesmo um operador (ou pelo menos não oficialmente suportado; se estiver preparado para mexer nos componentes internos do compilador, tudo é possível). No entanto, as macros - planejadas para a próxima versão principal do idioma Raku - permitirão isso.

Jonathan Worthington
fonte