在 Raku 文档中指出,收集-获取构造正在被惰性评估。在以下示例中,我很难得出关于构造的惰性的结论:
say 'Iterate to Infinity is : ', (1 ... Inf).WHAT;
say 'gather is : ', gather {
take 0;
my ($last, $this) = 0, 1;
loop {
take $this;
($last, $this) = $this, $last + $this;
}
}.WHAT;
say '------------------------------------';
my @f1 = lazy gather {
take 0;
my ($last, $this) = 0, 1;
loop {
take $this;
($last, $this) = $this, $last + $this;
}
}
say '@f1 : ', @f1.WHAT;
say '@f1 is lazy : ', @f1.is-lazy;
say '------------------------------------';
my @f2 = 1 ... Inf;
say '@f2 : ', @f2.WHAT;
say '@f2 is lazy : ', @f2.is-lazy;
在第一种情况下(将 Seq 分配给 @f1),如果我们去掉“惰性”定义,那么生成的序列(使用 collect-take)将永远运行(不是惰性)。
在第二种情况下(将 Seq 分配给 @f2)@f2 变得懒惰。
为什么我们在行为上有差异?尽管我们尝试做同样的事情:以惰性方式将 Seq 分配给数组
有人可以澄清一下吗???