Raku 最后在非循环上

Tim*_*son 7 block exit raku

我有一些可以在 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 才会执行此操作。

有没有好的方法可以做到这一点?我觉得应该有一个移相器,但还没有弄清楚如何在没有标志变量的情况下做到这一点,这似乎是可以避免的。

谢谢,

cod*_*ons 6

Raku 支持给定块的类似控制流。

\n

这是您发布的 Perl 代码的相当字面的翻译(即不一定是惯用的 Raku):

\n
given * {\n    for ^6 -> $item {\n        succeed if $item == 6;\n    }\n    default { print "No items matched!\\n"; }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

编辑:哦,对于一个不太字面翻译/更惯用的 Raku 解决方案,好吧,TIMTOWTDI,但我可能会选择return匿名的 ing sub

\n
sub { for ^6 { return when 6 }\n      say "No items matched!" }()\n
Run Code Online (Sandbox Code Playgroud)\n

(当然,我认为最Raku 风格的解决方法可能根本不涉及任何 Raku 语法 \xe2\x80\x93 ,而是涉及修改 Raku 的一种编织语言允许for循环占用else块。但我不建议进行此类恶作剧!)

\n