可以插入无符号变量或常量吗?

Can sigil-less variables or constants be interpolated?

虽然我没有找到它的文档,但显然您可以通过 {}:

在它们周围插入无符号变量和常量
constant ⲧ = " " xx 4;
say "{ⲧ}Tabbed"; # OUTPUT: «       Tabbed␤»

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

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

但这仅在使用 q(和派生的)引号的情况下。这只是一个未记录的功能,还是我在这里遗漏了什么?

我不认为它是未记录的功能,而是现有功能设计的固有功能。

A double 引用字符串 ("...") 将 {...} 形式的表达式插入为代码。所以它只是工作。

q 引号默认情况下类似于 引号字符串 ('...')。因此,默认情况下,它 而不是 内插 {...} 形式的表达式。但是,如果您添加 c 副词,那么 插入这些 code 块,因此默认情况下在双引号字符串中工作的相同内容也适用于 q:c.

或者 可能遗漏了什么。我们似乎在盲点上大致互补。我们一起可能有 50/50 的愿景,无论这意味着什么。 :)

这些完全相同

          "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 启用功能


已记录,您向文档提供了 link。
也许可以更清楚地说明:

  • ""qq ""
  • 的缩写
  • qq ""Q :qq "" / Q :double ""
  • 的缩写
  • :qq / :double 是所有 :backslash :closure :scalar :array :hash [=41= 的缩写].

此外,可能值得为所有这些功能添加示例。