你能循环一个变量中的Perl 6块吗?

时间:2017-07-26 03:40:36

标签: perl6 control-structure

我一直想做这样的事情:

my $block := {
    state $n = 0;
    say $n++;
    last if $n > 3;
    };

loop $block;

甚至:

$block.loop;

我并不认为这是可能的,但如果是这样的话肯定会很酷。

我如何找出特定例程的来源?

$ perl6
To exit type 'exit' or '^D'
> &loop.^name
===SORRY!=== Error while compiling:
Undeclared routine:
    loop used at line 1

2 个答案:

答案 0 :(得分:5)

$block.loop工作,相当容易,可以住在模块土地上:

use MONKEY;
augment class Block {
    method loop($self:) {
        Nil while $self()
    }
}
my $a = { print "a" };
$a.loop  # aaaaaaaaaaaaaaaaaaa (with apologies to Knorkator)

使loop $block工作更加复杂,因为这将涉及对Perl 6语法的动作处理的更改。

答案 1 :(得分:4)

使用Perl 6中已有的内容,您可以在接收器上下文中使用Seq.from-loop (注意,REPL不会将最后一个语句放在一行上面的接收器上下文中)

my $block := {
    state $n = 0;
    say $n++;
    last if $n > 3;
}

Seq.from-loop: $block;
Seq.from-loop: {say $++}, {$++ <= 3};