我想了解Enumerator類是如何工作的。具體來說,我不知道如何創建yielder對象並將其傳遞給構造函數所需的代碼塊。如何實現基本的枚舉類?
這是我第一次嘗試:
class MyEnumerator
def initialize(&block)
@block = block
end
def next()
@block.call self
end
def yield(*args)
args
end
end
num_gen = MyEnumerator.new do |yielder|
(1..10).each { |num| yielder.yield num }
end
5.times { p num_gen.next }
它是不工作的,當然,因爲我不知道如何推動枚舉。有人能幫我理解我可以如何實現它嗎?
整潔。也許「@fiber = Fiber.new {yield Fiber}」模擬Enumerator行爲? – tokland
我之前有點匆忙,但這使得它更好,謝謝! –