[英]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.