class MyString
include Enumerable
def initialize(n)
@num = n
end
def each
i = 0
while i < @num
yield "#{i} within while"
puts "After yield #{i}"
i += 1
end
end
end
s = MyString.new(10)
a = s.to_enum
puts "first"
puts a.next
puts "second"
puts a.next
我的红宝石版本是2.2.5,和代码的输出是Ruby如何实现枚举器#下一个方法?
第一
0内,而
第二
屈服后0
1内,同时
我认为执行流程是first a.next->s.each->while->yield->second a.next->jump into while loop
我的问题是如何实现Enumerator#next方法ented?
我大概知道有调用块的产量突破,这导致yield->second a.next
;但是,我不明白第二个a.next如何跳回到while循环。
我猜迷惑你是'yield'关键字,next'也不怎么'实现。 – halfelf
@halfelf:我相信它非常关注'枚举器':在引入光纤之前,1.8是不可能的。普通的“yield”只适用于块,并且OP代码中没有块。这意味着捕获'tield'的块在'Enumerator'内部。 – Amadan