获取此示例代码:
#!/usr/bin/env perl6
use v6.c;
ROLL:
for 1..10 -> $r {
given (1..6).roll {
when 6 {
say "Roll $r: you win!";
last ROLL;
}
default {
say "Roll $r: sorry...";
}
}
LAST {
say "You either won or lost - this runs either way";
}
}
我希望能够区分掉出循环而明确说出last
。
理想情况下,这是一个移植器,但据我所知,在任何一种情况下都只有LAST
。
有优雅的方法吗? (优雅,所以不添加$won
变量。)
答案 0 :(得分:5)
我们正在处理Perl,所以有多种方法可以做到这一点;其中一个使用主题变量$_
来保留值,以便我们可以轻松地重复匹配它:
constant N = 5;
for flat (1..6).roll xx * Z 1..N -> $_, $n {
print "roll $n: $_ ";
when 6 {
put "(won)";
last;
}
default {
put "(lost)";
}
LAST {
print "result: ";
when 6 { put "winner :)" }
default { put "loser :(" }
}
}
答案 1 :(得分:1)
这是另一种方法。优雅?我认为合情合理。不过,我希望有一个单独的移相器。
#!/usr/bin/env perl6
use v6.c;
constant MAX_ROLLS = 10;
ROLL:
for 1..MAX_ROLLS+1 -> $r {
last ROLL if $r > MAX_ROLLS;
given (1..6).roll {
when 6 {
say "Roll $r: you win!";
last ROLL;
}
default {
say "Roll $r: sorry...";
}
}
LAST {
say "You lost, better luck next time!" if $r > MAX_ROLLS;
}
}