Cursus Raku / Geavanceerd / Meer over ingebouwde types / Aanhalingsconstructies / Exercises / Een closure in een q-string

Oplossing: Een closure in een q-string

Hier is een mogelijke oplossing voor de opgave.

Code

my $x = 10;
say q:c/$x squared is {$x ** 2}/;

🦋 Je kunt de broncode vinden in het bestand closure-quote.raku.

Uitvoer

$x squared is 100

Opmerkingen

  1. Het :c (closure) bijwoord schakelt interpolatie van ingebedde { ... }-code in binnen de anders letterlijke q-vorm. Binnen de accolades is $x echte code, dus {$x ** 2} evalueert tot 100.

  2. De $x buiten de accolades blijft precies zo staan als geschreven, omdat het scalaire bijwoord :s niet is ingeschakeld. Dit is precies het nut van de bijwoorden per functie: je krijgt ingebedde code zonder ook $-interpolatie in te schakelen.

  3. Bijwoorden kunnen worden gestapeld. Voeg ook :s toe, en de eerste $x wordt ook geinterpoleerd — beide functies zijn nu tegelijk actief:

my $x = 10;
say q:c:s/$x squared is {$x ** 2}/; # 10 squared is 100

Cursusnavigatie

Een closure in een q-string   |   Een heredoc