Все они абсолютно идентичны
"a $b {$c}"
qq "a $b {$c}"
Q :qq "a $b {$c}"
Q :double "a $b {$c}"
Q :b :s :a :h :c :f "a $b {$c}"
Q :backslash :scalar :array :hash :closure :function "a $b {$c}"
Чтобы синтаксический анализатор строковых литералов видел {}
как создающее замыкание, ему необходимо включить функцию замыкания.
Один из:qq
/ :double
включает :c
/ :closure
.
. Вы также можете отключить его с помощью :!closure
.
say qq :!closure "{ 1 + 2 }";
# { 1 + 2 }
То есть он запускаетсяс :qq
/ :double
семантикой и отключением :closure
семантики.
Здесь - это то, где функция qq
определена в Rakudo
role qq does b1 does c1 does s1 does a1 does h1 does f1 {
token starter { \" }
token stopper { \" }
method tweak_q($v) { self.panic("Too late for :q") }
method tweak_qq($v) { self.panic("Too late for :qq") }
}
b1
включает обратную косую черту
c1
включает закрытие
s1
включает скаляр
a1
включает массив
h1
включает хэш
f1
включает функцию
Это задокументировано, и вы предоставили ссылку на документацию.
Возможно, можно пояснить, что:
""
- это сокращение от qq ""
qq ""
- сокращение от Q :qq ""
/ Q :double ""
:qq
/ :double
сокращение от всех :backslash
:closure
:scalar
:array
:hash
:function
.
Также, возможно, стоит добавить примеры для всех этих функций.