W jaki sposób obiekt Enumerator Ruby iteruje zewnętrznie przez wewnętrzny iterator?

Zgodnie z dokumentacją Ruby obiekt Enumerator używaeach metoda (do wyliczenia), jeśli nie podano metody docelowejto_enum lubenum_for metody. Weźmy na przykład następującą łatkę małpy i jej moduł wyliczający

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

loop do
  puts e.next
end

Biorąc pod uwagę, że obiekt Enumerator używaeach metoda odpowiedzi, kiedynext nazywa się, jak dzwonić doeach metoda wygląda, za każdym razemnext jest nazywany? Czy klasa Enumeartor ładuje wstępnie całą zawartośćo.each i tworzy lokalną kopię do wyliczenia? Czy też istnieje jakaś magia rubinowa, która zawiesza operacje przy każdym oświadczeniu o dochodach donext jest wywoływany w enumeartor?

Jeśli wykonano kopię wewnętrzną, czy jest to kopia głęboka? A co z obiektami we / wy, które można wykorzystać do wyliczenia zewnętrznego?

Używam Ruby 1.9.2.

questionAnswers(1)

yourAnswerToTheQuestion