Курс языка программирования Raku / Продвинутый уровень / Подробнее о встроенных типах / Конструкции кавычек

Наречия кавычек

Поведение конструкции цитирования можно настроить с помощью наречий. Каждая функция цитирования — интерполяция скаляров, выполнение встроенных замыканий, обработка обратных косых черт — управляется своим собственным наречием, которое включает или выключает именно эту функцию, так что вы можете начать с q или Q и добавить ровно те возможности, которые вам нужны.

Некоторые распространённые наречия:

  • :s / :scalar — интерполировать скалярные переменные ($x)
  • :c / :closure — интерполировать встроенный код в { … }
  • :b / :backslash — обрабатывать управляющие последовательности с обратной косой чертой, такие как \n

Добавьте одно к q, чтобы включить отдельную функцию. Например, разрешить встроенный код, но ничего больше:

say q/result: {3 * 4}/;   # result: {3 * 4}  — plain q leaves the block untouched
say q:c/result: {3 * 4}/; # result: 12        — :c runs the block

С простым q блок { 3 * 4 } выводится как есть; только :c заставляет блок выполниться и подставляет его значение, тогда как $переменная по-прежнему останется нетронутой. Обратите внимание на разделители /…/ здесь: если бы строка была ограничена {…}, парсер бы всё равно справился — компилятор корректно считает вложенные фигурные скобки — но тогда внутренний { 3 * 4 } был бы прочитан как часть ограниченного текста, а не как замыкание, поэтому :c оставил бы его буквально. Когда текст содержит блок { … }, выбирайте разделитель, отличный от {…}, чтобы замыкание действительно выполнилось. Вы можете добавить интерполяцию скаляров к иначе буквальному Q:

my $name = 'Anna';
say Q:s{Hi, $name}; # Hi, Anna

Наречия также выключают функции с помощью !. Чтобы использовать qq, но оставить $ буквальным:

my $price = 5;
say qq:!s{costs $price dollars}; # costs $price dollars

qq эквивалентен Q со всеми включёнными наречиями интерполяции, а q эквивалентен Q с меньшим набором. Наречия дают вам тонкий контроль между этими двумя крайностями.

Практика

Пройдите 1 тест по содержанию этой темы.

Навигация по курсу

Тест — Кавычки   |   Тест — Наречия кавычек


💪 Или перейдите сразу к упражнениям этого раздела.