我如何在 Perl 6 中的 "for" 循环中使用 "map"?

How can I use "map" inside a "for" loop in Perl 6?

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

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

一起来看看

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

这告诉我们 &map return 是一个 Seq,这是一个惰性结构。

此外,for 循环主体中的最后一条语句用于聚合其 return 值,cf

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

say .WHAT for @list;

如果您在调用 &map 后添加另一个语句,调用将在 'sink context' 中进行,并会立即进行评估。

这也可以明确强制:

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

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

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