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



我一直想做这样的事情:

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

使$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语法的动作处理的更改。

使用 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};

最新更新