可以使用Enumerator::Lazy.new这样的枚举器转换为惰性枚举器(这是一个示例;在开始时,我已经有一个枚举器,而不是一个数组):
xs_enum = [1, 2, 3].to_enum
# => #<Enumerator: [1, 2, 3]:each>
xs_lazy_enum = Enumerator::Lazy.new(xs_enum, &:yield)
# => #<Enumerator::Lazy: #<Enumerator: [1, 2, 3]:each>:each>
xs_lazy_enum.force
# => [1, 2, 3]
有更简洁的方法吗?
答案 0 :(得分:8)
您可以直接在阵列(或枚举器)上调用lazy
。
[1, 2, 3].lazy
# => #<Enumerator::Lazy: [1, 2, 3]>
答案 1 :(得分:4)
怎么样:
[1, 2, 3].to_enum.lazy
# => #<Enumerator::Lazy: ...>
确实,但问题是我从枚举器开始,而不是从数组
开始
这并没有改变任何事情:
enum = (1..10).each
# => #<Enumerator: ...>
enum.lazy
# => #<Enumerator::Lazy: ...>
Enumerable#to_enum
返回一个枚举器。如果您将呼叫链接到Enumerable#lazy
,则第二条消息的接收方是第一次呼叫返回的枚举器。