我刚刚遇到了这段代码
Enumerator.new((1..100), :take, 5).to_a
# => []有人知道为什么它返回一个空数组而不是5个整数的数组吗?
发布于 2012-12-03 17:22:32
在文档中,Enumerator#new
new(obj, method = :each, *args)在第二种不推荐使用的形式中,生成的枚举数使用给定的方法和传递的给定参数迭代给定的对象。
不鼓励使用此表单。请改用Kernel#enum_for或Kernel#to_enum。
第二种用法(根据文档,您不应该使用它)需要一个each-like方法(这就是生成值的方法)。take返回值,但不会产生这些值,因此您会得到一个空的enumerable。
请注意,在Ruby2中,执行惰性take将非常简单
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] https://stackoverflow.com/questions/13680151
复制相似问题