可以对无符号变量或常量进行插值吗?

时间:2019-01-19 18:05:43

标签: perl6 string-interpolation

尽管我没有找到相关文档,但是显然您可以使用{}来对无符号变量和常量进行插值:

constant ⲧ = " " xx 4;
say "{ⲧ}Tabbed"; # OUTPUT: «       Tabbed␤»

显然,您需要use the :c adverb to do so

say q:c"π is {π}"; # OUTPUT: «π is 3.141592653589793␤»

但这仅在使用q(和派生的)引号的情况下。这仅仅是一个未记录的功能,还是我在这里缺少的东西?

2 个答案:

答案 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的视野。 :)