Wie kann der xx-Operator in Raku die Auswertung seines Code-Operanden auf der linken Seite verzögern?

9

Der Operator 'xx' ist insofern interessant:

(^100).pick xx 10

erzeugt eine Liste von 10 zufälligen Ints anstelle eines zufälligen Int, das 10 Mal als Liste wiederholt wird.

Wird der Operator vom Compiler als Sonderfall behandelt? Oder ist es wirklich nur ein anderes Sub, das wir auch selbst definieren können? (Wenn ja, würde mich sehr interessieren, wie ...)

Vielen Dank

Cowbaymoo
quelle

Antworten:

10

Ja, dies ist einer von mehreren Operatoren, die derzeit als spezielle Formulare im Compiler vorhanden sind. Andere Beispiele sind ||und &&, die nur die rechte Seite in Abhängigkeit von der Boolifizierung der linken Seite bewerten.

Gegenwärtig gibt es keine Möglichkeit, einen solchen Operator selbst zu definieren (oder zumindest keinen offiziell unterstützten; wenn Sie bereit sind, Compiler-Interna zu basteln, sind alle Dinge möglich). Makros, die für die nächste große Raku-Sprachversion geplant sind, werden dies jedoch ermöglichen.

Jonathan Worthington
quelle