我有一些可以在 Perl 中轻松完成的事情,但在 Raku 中却无法在不摆弄标志变量的情况下完成。这是 Perl 代码:
#!/usr/bin/perl
MAIN_BLOCK: {
foreach $item (1 2 3 4 5) {
$item == 6 and last MAIN_BLOCK;
}
print "No items matched!\n";
}
Run Code Online (Sandbox Code Playgroud)
这里的相关区别是 Perl 将允许您使用 last 退出任何标记块。仅当块是循环时,Raku 才会执行此操作。
有没有好的方法可以做到这一点?我觉得应该有一个移相器,但还没有弄清楚如何在没有标志变量的情况下做到这一点,这似乎是可以避免的。
谢谢,
Raku 支持给定块的类似控制流。
\n这是您发布的 Perl 代码的相当字面的翻译(即不一定是惯用的 Raku):
\ngiven * {\n for ^6 -> $item {\n succeed if $item == 6;\n }\n default { print "No items matched!\\n"; }\n}\nRun Code Online (Sandbox Code Playgroud)\n编辑:哦,对于一个不太字面翻译/更惯用的 Raku 解决方案,好吧,TIMTOWTDI,但我可能会选择return匿名的 ing sub:
sub { for ^6 { return when 6 }\n say "No items matched!" }()\nRun Code Online (Sandbox Code Playgroud)\n(当然,我认为最Raku 风格的解决方法可能根本不涉及任何 Raku 语法 \xe2\x80\x93 ,而是涉及修改 Raku 的一种编织语言允许for循环占用else块。但我不建议进行此类恶作剧!)
| 归档时间: |
|
| 查看次数: |
180 次 |
| 最近记录: |