Курс Raku / Розширені / Докладніше про вбудовані типи / Конструкції квотування 🆕 / Вправи / Замикання в q-рядку

Розв’язання: Замикання в q-рядку

Ось один із можливих варіантів розв’язання задачі.

Код

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

🦋 Вихідний код можна знайти у файлі closure-quote.raku.

Вивід

$x squared is 100

Коментарі

  1. Наріччя :c (closure) вмикає інтерполяцію вбудованого коду { … } у буквальній в інших випадках формі q. Усередині фігурних дужок $x є справжнім кодом, тож {$x ** 2} обчислюється в 100.

  2. $x за межами дужок залишається точно таким, як записано, бо наріччя скалярів :s не ввімкнено. У цьому й полягає весь сенс наріч для окремих можливостей: ви отримуєте вбудований код, не вмикаючи заразом інтерполяцію $.

  3. Наріччя можна нанизувати. Додайте ще й :s — і провідний $x теж інтерполюється: обидві можливості тепер увімкнено водночас:

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

Навігація курсом

Замикання в q-рядку   |   Heredoc