Raku:在正则表达式中使用主题变量(来自 'for')
Raku: Using topic variable (from a 'for') inside a regex
我的代码按预期工作:
my @words = 'foo', 'bar';
my $text = 'barfoo';
for @words -> $to-regex {
$text ~~ m/ ($to-regex) {say "matched [=11=]"}/;
}
它打印:
matched foo
matched bar
但是,如果我尝试在 for 循环中使用主题变量,如:
for @words { # implicit "-> $_", AFAIK
$text ~~ m/ ($_) {say "matched [=13=]"}/;
}
我明白了:
matched barfoo
matched barfoo
使用后缀的结果相同:
$text ~~ m/ ($_) {say "matched [=15=]"}/ for @words; # implicit "-> $_", AFAIK
这是正则表达式中主题变量的特例吗?
是否应该保存它匹配的整个字符串?
smart-match 运算符有 3 个阶段
- 暂时将左边的参数别名为
$_
- 运行右边的表达式
- 对该结果调用
.ACCEPTS($_)
所以这不是正则表达式的特例,这就是 ~~
始终有效的方式。
for 1,2,3 {
$_.print;
'abc' ~~ $_.say
}
# 1abc
# 2abc
# 3abc
我的代码按预期工作:
my @words = 'foo', 'bar';
my $text = 'barfoo';
for @words -> $to-regex {
$text ~~ m/ ($to-regex) {say "matched [=11=]"}/;
}
它打印:
matched foo
matched bar
但是,如果我尝试在 for 循环中使用主题变量,如:
for @words { # implicit "-> $_", AFAIK
$text ~~ m/ ($_) {say "matched [=13=]"}/;
}
我明白了:
matched barfoo
matched barfoo
使用后缀的结果相同:
$text ~~ m/ ($_) {say "matched [=15=]"}/ for @words; # implicit "-> $_", AFAIK
这是正则表达式中主题变量的特例吗?
是否应该保存它匹配的整个字符串?
smart-match 运算符有 3 个阶段
- 暂时将左边的参数别名为
$_
- 运行右边的表达式
- 对该结果调用
.ACCEPTS($_)
所以这不是正则表达式的特例,这就是 ~~
始终有效的方式。
for 1,2,3 {
$_.print;
'abc' ~~ $_.say
}
# 1abc
# 2abc
# 3abc