这有效:

bastille% perl6 -e 'my @squares = (1...*).map({ $_ ** 2 }); say @squares[0..^10].join: ", "'
1, 4, 9, 16, 25, 36, 49, 64, 81, 100

但是,这不是:
bastille% perl6 -e 'my @squares <== map { $_ ** 2 } <== 1...*; say @squares[0..^10].join: ", "'
Cannot push a lazy list onto a Array
  in block <unit> at -e line 1

为什么会抛出?有没有一种方法可以将懒惰的列表与提要一起使用?

最佳答案

提要运算符<==将元素追加到数组。

my @s <== ^3;
@s <== <a>..<c>;
say @s
[0 1 2 a b c]

所以

my @squares <== map { $_ ** 2 } <== 1...*;

的工作原理与

my @squares.append: map  * ** 2, 1..*;

您可以将项目分配运算符=与方括号一起使用

my @squares = ( map { $_ ** 2 } <== 1..* );

或下一个小技巧

[=] my @squares <== map { $_ ** 2 } <== 1..*;

10-07 14:58