documentation for gather/take mentions
绑定到标量容器或无符号容器也将导致懒惰。
但是
my \result = gather { for 1..3 { take $_² } };
say result.is-lazy # OUTPUT: «False»
如果您使用标量,并使用:=
进行绑定,是否会发生某些隐式惰性收集/获取语句的方法?
更新:它实际上是惰性的,只是它没有以预期的方式响应is-lazy方法:
my $result := gather { for 1..3 { say "Hey"; take $_² } };
say $result[0] # OUTPUT: «Hey1»
所以问题是““懒惰者考虑实际懒惰的条件是什么?”
答案 0 :(得分:9)
我认为问题实际上是您无法真正知道gather
块中发生了什么。所以这就是Seq
对象告诉您它不是惰性的原因。
也许更多的是文档问题:如果is-lazy
返回True
,那么您可以确保 Seq
(实际上,其基础Iterator
)本身不会结束。如果is-lazy
返回False
,则基本上意味着我们不确定。
有人可能会争辩说,在那种情况下,is-lazy
应该返回Bool
类型的对象,该对象也将被解释为false(因为所有类型对象在布尔中都被认为是False
上下文)。但这至少可以表明它确实是不确定的/不确定的。