gpt4 book ai didi

ruby - 为什么这个 enumerator.to_a 返回 []?

转载 作者:数据小太阳 更新时间:2023-10-29 08:50:42 25 4
gpt4 key购买 nike

刚好遇到这段代码

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

有谁知道为什么它返回一个空数组而不是一个包含 5 个整数的数组?

最佳答案

来自文档,Enumerator#new :

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

In the second, deprecated, form, a generated Enumerator iterates over the given object using the given method with the given arguments passed.

Use of this form is discouraged. Use Kernel#enum_for or Kernel#to_enum instead.

第二种用法(根据文档你不应该使用它)需要一个类似 each 的方法(就是这样,一个产生值的方法)。 接受返回值,但不产生它们,所以你得到一个空的枚举。

请注意,在 Ruby 2 中执行惰性 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]

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

25 4 0