如何解决Raku:在正则表达式中使用主题变量来自“ for”
我有此代码可以正常工作:
my @words = 'foo','bar';
my $text = 'barfoo';
for @words -> $to-regex {
$text ~~ m/ ($to-regex) {say "matched $0"}/;
}
它打印:
matched foo
matched bar
但是,如果我尝试在for循环上使用主题变量,例如:
for @words { # implicit "-> $_",AFAIK
$text ~~ m/ ($_) {say "matched $0"}/;
}
我明白了:
matched barfoo
matched barfoo
使用后缀实现相同的结果:
$text ~~ m/ ($_) {say "matched $0"}/ for @words; # implicit "-> $_",AFAIK
这是正则表达式中topic变量的特例吗?
是否应该保留与之匹配的整个字符串?
解决方法
智能匹配运算符分为三个阶段
- 将左参数暂时别名为
$_
- 在右侧运行表达式
- 对该结果致电
.ACCEPTS($_)
因此,对于正则表达式而言,这不是特殊情况,而是~~
始终有效的方式。
for 1,2,3 {
$_.print;
'abc' ~~ $_.say
}
# 1abc
# 2abc
# 3abc
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。