Курс языка программирования Raku / Продвинутый уровень / Подробнее о встроенных типах / Конструкции кавычек / Exercises / Замыкание в 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