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

Адверби квотування

Поведінку конструкції цитування можна налаштувати наріччями. Кожна можливість цитування — інтерполяція скалярів, виконання вбудованих замикань, обробка зворотних косих рисок — керується власним наріччям, яке вмикає або вимикає саме її, тож ви можете почати з q чи Q і повернути назад рівно ті можливості, які вам потрібні.

Кілька поширених наріч:

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

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

say q/result: {3 * 4}/;   # result: {3 * 4}  — звичайний q залишає блок недоторканим
say q:c/result: {3 * 4}/; # result: 12        — :c виконує блок

Зі звичайним 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 тест за змістом цієї теми.

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

Тест — Квотування   |   Тест — Адверби квотування


💪 Або перейдіть одразу до вправ цього розділу.