Как оператор xx в Raku может задержать вычисление своего левого кода операнда? - PullRequest
8 голосов
/ 20 апреля 2020

Оператор 'xx' интересен тем, что:

(^100).pick xx 10

создает список из 10 случайных Int, а не одного случайного Int, повторенного 10 раз в виде списка.

Является ли оператор обрабатывается компилятором как особый случай? Или это действительно просто другая подпрограмма, которую мы тоже можем определить сами? (Если так, мне было бы очень интересно узнать, как ...)

Спасибо

1 Ответ

10 голосов
/ 20 апреля 2020

Да, это один из ряда операторов, которые в настоящее время существуют как специальные формы в компиляторе. Другие примеры включают || и &&, которые оценивают только правую сторону в зависимости от степени увеличения левой стороны.

В настоящее время нет способа определить такого оператора самостоятельно (или при по крайней мере, официально не поддерживается, если все готово, чтобы повозиться с внутренностями компилятора, все возможно). Однако макросы - запланированные для следующей основной версии языка раку - позволят это.

...