I'm trying to create a generator in Ruby that always returns the next value. 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.
What am I missing?
Your method returns a new
Enumeratorevery time you call it. So, you never ask for the second element. You create a newEnumerator, ask for its first element, throw theEnumeratoraway, create a new one, ask for its first element, throw it away, etc.You need to actually store the
Enumeratorsomewhere and call itsnextmethod multiple times: