我如何在 Perl 6 中的 "for" 循环中使用 "map"?
How can I use "map" inside a "for" loop in Perl 6?
我正在尝试在 for
循环中使用 map
,但这段代码不起作用。此代码应打印 1
和 2
三次。但是下面的代码没有输出。如果您取消注释 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;
}
我正在尝试在 for
循环中使用 map
,但这段代码不起作用。此代码应打印 1
和 2
三次。但是下面的代码没有输出。如果您取消注释 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;
}