简体   繁体   English

Ruby 枚举器不返回下一个值

[英]Ruby enumerator not returning next value

I'm trying to create a generator in Ruby that always returns the next value.我正在尝试在 Ruby 中创建一个始终返回下一个值的生成器。 For example例如

def all_numbers
  Enumerator.new do |yielder|
    number = 0
    count = 1
    loop do
      number += count
      count += 1
      yielder.yield number
    end
  end
end

I expect the above code to return我希望上面的代码能够返回

all_numbers.next # 1
all_numbers.next # 2
all_numbers.next # 3
# etc

However, I keep just keeping 1 over and over again.但是,我一遍又一遍地保持1

What am I missing?我错过了什么?

Your method returns a new Enumerator every time you call it.每次调用时,您的方法都会返回一个新的Enumerator So, you never ask for the second element.所以,你永远不会要求第二个元素。 You create a new Enumerator , ask for its first element, throw the Enumerator away, create a new one, ask for its first element, throw it away, etc.你创建一个新的Enumerator ,要求它的第一个元素,扔掉Enumerator ,创建一个新的,要求它的第一个元素,扔掉它,等等。

You need to actually store the Enumerator somewhere and call its next method multiple times:您需要将Enumerator实际存储在某处并多次调用其next方法:

enum = all_numbers

enum.next #=>   1
enum.next #=>   3
enum.next #=>   6
enum.next #=>  10
enum.next #=>  15
enum.next #=>  21
enum.next #=>  28
enum.next #=>  36
enum.next #=>  45
enum.next #=>  55
enum.next #=>  66
enum.next #=>  78
enum.next #=>  91
enum.next #=> 105
enum.next #=> 120

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM