raku - Perl6 : is there a phaser that runs only when you fall out of a loop?

标签 raku

拿这个示例代码:

#!/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 变量。)

最佳答案

我们正在处理 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 :(" }
    }
}

关于raku - Perl6 : is there a phaser that runs only when you fall out of a loop?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36117329/

相关文章:

Raku:在 Windows 上安装 Termbox

exception - 控制或曾经与最后一团糟?

string - 在 Raku 中不创建字符串上下文的情况下进行插值?

raku - 如何禁用 Perl 6 REPL 创建 .precomp

raku - 我的类(class)和我们在 Raku(perl6) 中的类(class)有什么区别?

raku - 在 perl6 中运行命令,在 shell 中运行的命令在 perl6 中运行时会产生失败

raku - Perl6 中的 Sub vs Blocks - 又名罗马数字挑战

raku - 角色错误 "currying"

sorting - Perl6 : Sorting Hash by Values and using kv

raku - :ex and :ov adverbs with Perl 6 named captures