乐最后在非循环

Raku last on non-loops

我有一些我可以在 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";
}

此处的相关区别在于 Perl 将允许您使用 last 退出任何带标签的块。 Raku 只会在块是循环时执行此操作。

有什么好的方法吗?我觉得应该有一个移相器来解决这个问题,但还没有想出如何在没有标志变量的情况下做到这一点,这似乎应该是可以避免的。

谢谢,

Raku 支持与 given 块类似的控制流。

这是您发布的 Perl 代码的直译(即不一定是地道的 Raku):

given * {
    for ^6 -> $item {
        succeed if $item == 6;
    }
    default { print "No items matched!\n"; }
}

edit:哦,对于 less-literally-translated/more-idiomatic-Raku 解决方案,好吧,TIMTOWTDI,但我可能会使用来自匿名 subreturning ]:

sub { for ^6 { return when 6 }
      say "No items matched!" }()

(当然,我想 most Raku-ish 的解决方法可能根本不涉及任何 Raku 语法——而是涉及 modifying one of Raku's braided languages 允许 for 循环采用 else 块。但我不建议那些恶作剧!)