【发布时间】:2020-01-22 19:47:00
【问题描述】:
我想使用命名捕获在for 块中进行字符串替换。我希望得到数字 1,2,3 作为输出。但第一次运行是Nil,然后是第 2 次和第 3 次运行的 1 和 2。如何在循环构造中正确使用.subst?当使用 map 构造而不是 for 循环时,我看到了相同的行为。如果我用固定的字符串值替换,它确实可以按预期工作。
for <a1 b2 c3> -> $var {
say $var;
say $var.subst(/.$<nr>=(\d)/, $<nr>); #.subst(/.$<nr>=(\d)/, 'X'); #OK
}
#`[
This is Rakudo version 2019.11 built on MoarVM version 2019.11
Output:
a1
Use of Nil in string context
in block at test3.pl6 line 3
b2
1
c3
2
]
【问题讨论】:
-
我很好奇。什么是 $
? (我在 raku 文档中找不到它。) -
@p6steve named capture
-
docs.raku.org/language/… - 谢谢@valle - 现在找到了!
-
或许有时考虑使用
S///。在这种情况下,你可以做S[.$<nr>=(\d)] = $<nr> given $var -
@JoKing 不错。我赞成您的评论,然后取消了赞成票,因为我意识到我想检查一些东西(结果并不重要),现在所以不会让我恢复我的赞成票。所以我写这个是为了手动+1你的好建议。我也将它整合到我的答案中。