¿Cómo el objeto Enumerador de Ruby itera externamente sobre un iterador interno?
Según la documentación de Ruby, el objeto Enumerador usa eleach
método (para enumerar) si no se proporciona ningún método de destino alto_enum
oenum_for
metodos Ahora, tomemos el siguiente parche de mono y su enumerador, como ejemplo
o = Object.new
def o.each
yield 1
yield 2
yield 3
end
e = o.to_enum
loop do
puts e.next
end
Dado que el objeto Enumerador usa eleach
método para responder cuandonext
se llama, ¿cómo hacen las llamadas a laeach
El método parece, cada vez.next
¿se llama? ¿La clase Enumeartor carga previamente todos los contenidos deo.each
y crea una copia local para la enumeración? ¿O hay algún tipo de magia Ruby que cuelga las operaciones en cada declaración de rendimiento hasta quenext
se llama en el enumerador?
Si se hace una copia interna, ¿es una copia profunda? ¿Qué pasa con los objetos de E / S que podrían utilizarse para la enumeración externa?
Estoy usando Ruby 1.9.2.