Zgodnie z dokumentacją Ruby, obiekt Enumerator używa metody each
(do wyliczenia), jeśli nie podano metody docelowej dla metod to_enum
lub enum_for
. Teraz weźmy następującą poprawkę małpa i jego wyliczający, jako przykładW jaki sposób moduł wyliczający Ruby dokonuje iteracji zewnętrznej na wewnętrznym iteratorze?
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 wykorzystuje metodę each
odpowiedzieć kiedy next
nazywa się, w jaki sposób połączenia do wyglądu each
metoda jak za każdym razem, next
nazywa się? Czy klasa Enumeartor wstępnie ładuje całą zawartość o.each
i tworzy lokalną kopię do wyliczenia? Czy istnieje jakaś magia rubinowa, która zawiesza operacje na każdym zestawieniu rachunku zysków, aż do wywołania next
w enumeartorze?
Jeśli wykonano kopię wewnętrzną, czy jest to kopia głęboka? A co z obiektami we/wy, które mogą być używane do zewnętrznego wyliczania?
Używam Ruby 1.9.2.
tak wiesz, użyć odwrócone, pojedyncze apostrofy (\ ') wokół tekstu zrobić inline kod formatowania':) ' –
Muchas gracias! Będzie o tym pamiętać następnym razem. –