如何在Perl 6中的“for”循环中使用“map”?

时间:2016-01-10 16:15:55

标签: perl6

我正在尝试在map循环中使用for,但此代码无效。此代码应打印12三次。但是下面的代码没有输出。如果您取消注释exit行,它将只能部分工作。知道为什么吗?我使用当前的Perl 6版本(基于MoarVM版本2015.12和Windows版本构建的Rakudo版本2015.12-79-g4bb47d5)对其进行了测试。

for (1..3) {
 map { say $_ }, (1..2);
# exit;
}

1 个答案:

答案 0 :(得分:8)

我们来看看

say (map { say $_ }, 1..2).WHAT;

这告诉我们&map返回Seq,这是一个懒惰的构造。

此外,for循环体中的最后一个语句用于汇总其返回值,cf

my @list = do for 1..3 {
    map { say $_ }, 1..2;
}

say .WHAT for @list;

如果在调用&map后添加另一个语句,则调用将位于“接收上下文”中并急切地进行评估。

这也可以明确强制:

for 1..3 {
    sink map { say $_ }, 1..2;
}

或者,只需使用另一个for循环:

for 1..3 {
    .say for 1..2;
}