Esta pregunta no trata acerca de cómo usar los Enumeradores en Ruby 1.9.1, sino que siento curiosidad sobre cómo funcionan. Aquí hay un código:¿Cómo funcionan los enumeradores en Ruby 1.9.1?
class Bunk
def initialize
@h = [*1..100]
end
def each
if !block_given?
enum_for(:each)
else
0.upto(@h.length) { |i|
yield @h[i]
}
end
end
end
En el código anterior que puedo utilizar e = Bunk.new.each
, y luego e.next
, e.next
para obtener cada elemento sucesivo, pero ¿qué es exactamente lo suspendía la ejecución y luego reanudar en el lugar correcto?
Soy consciente de que si el rendimiento en 0.upto
se reemplaza por Fiber.yield
, entonces es fácil de entender, pero ese no es el caso aquí. Es un simple viejo yield
, entonces, ¿cómo funciona?
Miré enumerator.c pero es casi incomprensible para mí. Quizás alguien podría proporcionar una implementación en Ruby, utilizando fibras, no 1.8.6 encuestadores basados en la continuación del estilo, ¿eso lo deja todo claro?
gracias por su respuesta. sí, estoy pidiendo muchos detalles sobre esto. específicamente me gustaría saber si es posible implementarlo todo en Ruby o si hay algo furtivo en C que no es posible en Ruby. Si es posible implementarlo puramente en Ruby, ¡me encantaría ver el código! :) – horseyguy