Как объект Enumerator в Ruby выполняет внешнюю итерацию по внутреннему итератору?

Согласно документации Ruby, объект Enumerator используетeach метод (для перечисления), если целевой метод не предоставляетсяto_enum или жеenum_for методы. Теперь давайте возьмем следующий патч обезьяны и его перечислитель в качестве примера.

o = Object.new
def o.each
    yield 1
    yield 2
    yield 3
end
e = o.to_enum

loop do
  puts e.next
end

Учитывая, что объект Enumerator используетeach способ ответить, когдаnext называется, как звонить наeach метод похож, каждый разnext называется? Класс Enumeartor предварительно загружает все содержимоеo.each и создает локальную копию для перечисления? Или есть какая-то магия Ruby, которая вешает операции в каждом операторе yield доnext называется на enumeartor?

Если внутренняя копия сделана, это глубокая копия? А как насчет объектов ввода / вывода, которые можно использовать для внешнего перечисления?

Я использую Ruby 1.9.2.

Ответы на вопрос(1)

Ваш ответ на вопрос