尽管我没有找到相关文档,但是显然您可以使用{}来对无符号变量和常量进行插值:
constant ⲧ = " " xx 4;
say "{ⲧ}Tabbed"; # OUTPUT: « Tabbed»
显然,您需要use the :c
adverb to do so。
say q:c"π is {π}"; # OUTPUT: «π is 3.141592653589793»
但这仅在使用q
(和派生的)引号的情况下。这仅仅是一个未记录的功能,还是我在这里缺少的东西?
答案 0 :(得分:8)
这些都是完全相同的
"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
语义。
Here是Rakudo中定义的qq
功能的地方
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
的缩写。 另外,值得为所有这些功能添加示例。
答案 1 :(得分:6)
我不认为它是未记录的功能,而是现有功能设计所固有的。
一个 double 引号字符串("..."
)插入形式为{...}
的表达式作为代码。这样就可以了。
默认情况下,q
引号就像一个单引号字符串('...'
)。因此,默认情况下,它不会不插入{...}
形式的表达式。但是,如果您添加c
副词,则会对这些c
ode块进行插值,因此默认情况下,在双引号字符串中起作用的东西也与{{1} }。
或者我正在丢失某些东西。我们的盲目性似乎是相辅相成的。不管我们意味着什么,我们在一起可能拥有50/50的视野。 :)