你能循环一个变量中的 Perl 6 块吗?
Can you loop a Perl 6 block that's in a variable?
我一直想做这样的事情:
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};
我一直想做这样的事情:
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};