Согласно документации 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
?
Если делается внутренняя копия, является ли она глубокой копией? Как насчет объектов ввода-вывода, которые можно использовать для внешнего перечисления?
Я использую Руби 1.9.2.