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.