Perl6 中的字符串插值
String interpolation in Perl6
我很难弄明白为什么会出现这种说法
say "\c500";
在我的屏幕上按预期生成字符 'Ǵ',而以下语句在编译时给我一条错误消息 ("Unrecognized \c character"):
my $i = 500;
say "\c$i";
即使
say "$i"; # or 'say $i.Str;' for that matter
生成“500”(“$i”。WHAT 表示类型 Str)。
您必须使用 $i.chr
,已记录 here。 \c
在字符串中专门处理,似乎不接受任何非文字的内容。
Perl 6 中的字符串文字解析器是一种领域特定语言。
基本上,您编写的内容会像语言的其余部分一样得到编译。
"abc$_"
&infix:«~»('abc',$_.Str)
在 \c500
的情况下,您可以将其视为编译时常量。
"\c500"
(BEGIN 500.chr)
其实更像是:
(BEGIN 500.HOW.find_method_qualified(Int,500,'chr').(500))
除了字符串文字的编译器实际上试图将其编译为抽象语法树,但由于没有添加代码来处理这种情况 \c
.
即使有,\c
在 BEGIN
时有效地编译为 运行,这是在 $_
具有值之前。
另外 \c
用于 .chr
"\c9" eq "\c[TAB]" eq "\cI" eq "\t"
(请注意,\cI
表示您将通过键入 Cntrl+Alt+ 获得的字符i 在 posix 平台上)
那么 \c$_
应该编译成哪些?
$_.chr
$_.parse-names
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.index($_).succ.chr
如果你想要.chr
你可以写成下面的一种。 (在允许的地方添加空格)
"abc$_.chr( )def"
"abc{ $_.chr }def"
"abc{ .chr }def"
'abc' ~ $_.chr ~ 'def'
我很难弄明白为什么会出现这种说法
say "\c500";
在我的屏幕上按预期生成字符 'Ǵ',而以下语句在编译时给我一条错误消息 ("Unrecognized \c character"):
my $i = 500;
say "\c$i";
即使
say "$i"; # or 'say $i.Str;' for that matter
生成“500”(“$i”。WHAT 表示类型 Str)。
您必须使用 $i.chr
,已记录 here。 \c
在字符串中专门处理,似乎不接受任何非文字的内容。
Perl 6 中的字符串文字解析器是一种领域特定语言。
基本上,您编写的内容会像语言的其余部分一样得到编译。
"abc$_"
&infix:«~»('abc',$_.Str)
在 \c500
的情况下,您可以将其视为编译时常量。
"\c500"
(BEGIN 500.chr)
其实更像是:
(BEGIN 500.HOW.find_method_qualified(Int,500,'chr').(500))
除了字符串文字的编译器实际上试图将其编译为抽象语法树,但由于没有添加代码来处理这种情况 \c
.
即使有,\c
在 BEGIN
时有效地编译为 运行,这是在 $_
具有值之前。
另外 \c
用于 .chr
"\c9" eq "\c[TAB]" eq "\cI" eq "\t"
(请注意,\cI
表示您将通过键入 Cntrl+Alt+ 获得的字符i 在 posix 平台上)
那么 \c$_
应该编译成哪些?
$_.chr
$_.parse-names
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.index($_).succ.chr
如果你想要.chr
你可以写成下面的一种。 (在允许的地方添加空格)
"abc$_.chr( )def"
"abc{ $_.chr }def"
"abc{ .chr }def"
'abc' ~ $_.chr ~ 'def'