Raku-Kurs / Fortgeschritten / Mehr über eingebaute Typen / Quoting-Konstrukte / Exercises / Ein Closure in einem q-String
Lösung: Ein Closure in einem q-String
Hier ist eine mögliche Lösung der Aufgabe.
Code
my $x = 10;
say q:c/$x squared is {$x ** 2}/;🦋 Du findest den Quellcode in der Datei closure-quote.raku.
Ausgabe
$x squared is 100Kommentare
Das
:c(Closure) Adverb schaltet die Interpolation von eingebettetem{ … }-Code in der ansonsten wörtlichenq-Form ein. Innerhalb der geschweiften Klammern ist$xechter Code, sodass{$x ** 2}zu100ausgewertet wird.Das
$xaußerhalb der geschweiften Klammern bleibt genau so stehen, wie es geschrieben wurde, weil das Skalar-Adverb:snicht aktiviert ist. Genau das ist der Sinn der funktionsspezifischen Adverbien: Du bekommst eingebetteten Code, ohne gleichzeitig die$-Interpolation einzuschalten.Adverbien können gestapelt werden. Füge auch
:shinzu, und das führende$xwird ebenfalls interpoliert — beide Funktionen sind jetzt gleichzeitig aktiv:
my $x = 10;
say q:c:s/$x squared is {$x ** 2}/; # 10 squared is 100