Я пытаюсь понять, как работает класс Enumerator. В частности, я не знаю, как создается объект-получатель и передается в блок кода, который принимает конструктор.
Вот моя первая попытка:
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 }
Это не работает, конечно, потому что я не знаю, как продвигать счетчик. Может ли кто-нибудь помочь мне понять, как я могу это реализовать?