我刚遇到这段代码

Enumerator.new((1..100), :take, 5).to_a
# => []

有人知道为什么它返回一个空数组而不是一个由5个整数组成的数组吗?

最佳答案

从文档中,Enumerator#new

new(obj, method = :each, *args)

在第二个表单中,生成的枚举器迭代
使用具有给定参数的给定方法的给定对象
通过。
不鼓励使用此表格。使用kernel枚举
相反。
第二种用法(根据文档不应该使用)需要一个类似于each的方法(就是它,一个产生值的方法)。take返回值,但不产生值,因此得到一个空的可枚举值。
注意,在ruby 2中,执行lazytake非常简单:
2.0.0dev> xs = (1..100).lazy.take(5)
#=> #<Enumerator::Lazy: #<Enumerator::Lazy: 1..100>:take(5)>
2.0.0dev> xs.to_a
#=> [1, 2, 3, 4, 5]

关于ruby - 为什么此enumerator.to_a返回[]?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13680151/

10-13 03:39