乐最后在非循环
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,但我可能会使用来自匿名 sub
的 return
ing ]:
sub { for ^6 { return when 6 }
say "No items matched!" }()
(当然,我想 most Raku-ish 的解决方法可能根本不涉及任何 Raku 语法——而是涉及 modifying one of Raku's braided languages 允许 for
循环采用 else
块。但我不建议那些恶作剧!)
我有一些我可以在 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,但我可能会使用来自匿名 sub
的 return
ing ]:
sub { for ^6 { return when 6 }
say "No items matched!" }()
(当然,我想 most Raku-ish 的解决方法可能根本不涉及任何 Raku 语法——而是涉及 modifying one of Raku's braided languages 允许 for
循环采用 else
块。但我不建议那些恶作剧!)