Курс по 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 кара блока да се изпълни и вмъква стойността му, докато $variable все пак би останала непроменена. Обърнете внимание на разделителите /…/ тук: ограждането на низа с {…} все пак би работило — компилаторът брои вложените фигурни скоби правилно — но тогава вътрешният { 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 тест върху съдържанието на тази тема.

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

Тест — Цитиране   |   Тест — Наречия за цитиране


💪 Или преминете направо към упражненията в този раздел.