我正在尝试在map
循环中使用for
,但此代码无效。此代码应打印1
和2
三次。但是下面的代码没有输出。如果您取消注释exit
行,它将只能部分工作。知道为什么吗?我使用当前的Perl 6版本(基于MoarVM版本2015.12和Windows版本构建的Rakudo版本2015.12-79-g4bb47d5)对其进行了测试。
for (1..3) {
map { say $_ }, (1..2);
# exit;
}
答案 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;
}