Objetos Enumerator
Iteración externa
Objetos Enumerator es una lección gratuita de Ruby Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Ruby Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Ruby Academy incluye 4 lecciones en total.
Iteración externa
Un Enumerator es un objeto que representa una iteración. Admite la iteración externa: extrae los valores de uno en uno con next, en lugar de proporcionar un bloque a each.
enum = [10, 20, 30].each
puts enum.next
puts enum.nextObtener un Enumerator
Llame a un método iterador como each sin bloque y recibirá un Enumerator en lugar de ejecutarlo.
enum = [1, 2, 3].each
puts enum.classExtraer con next
next devuelve el elemento siguiente cada vez que lo llama. El Enumerator recuerda su posición.
letters = ["a", "b", "c"].each
puts letters.next
puts letters.next
puts letters.nextStopIteration al final
Cuando se agotan los valores, next genera StopIteration. Puede capturarla para detenerse correctamente.
enum = [1, 2].each
begin
loop { puts enum.next }
rescue StopIteration
puts "done"
endpeek y rewind
peek muestra el siguiente valor sin avanzar; rewind restablece la posición inicial.
enum = [5, 6, 7].each
puts enum.peek
puts enum.next
enum.rewind
puts enum.nextCrear enumeradores personalizados
Cree uno propio con Enumerator.new. El bloque recibe un yielder y; produzca valores con y << o y.yield.
evens = Enumerator.new do |y|
n = 0
loop do
y << n
n += 2
end
end
puts evens.next
puts evens.next
puts evens.nextEnumeradores infinitos
Como se basan en la extracción, los Enumerator personalizados pueden ser infinitos. Extraiga solo lo que necesite.
counter = Enumerator.new do |y|
i = 1
loop { y << i; i += 1 }
end
p counter.first(5)Los Enumerator son Enumerable
Un Enumerator incluye Enumerable, por lo que también funcionan todos los métodos habituales (map, select, take), combinando la iteración interna y externa.
fib = Enumerator.new do |y|
a, b = 0, 1
loop do
y << a
a, b = b, a + b
end
end
p fib.take(8)with_index
with_index añade un índice a cualquier Enumerator, con la opción de comenzar desde un número personalizado.
["x", "y", "z"].each.with_index(1) do |item, i|
puts "#{i}: #{item}"
endDevolver un Enumerator desde each
En sus propias clases, devuelva to_enum(:each) (o enum_for) cuando no se proporcione ningún bloque, para que quien llame pueda iterar externamente.
class Trio
def each
return to_enum(:each) unless block_given?
yield 1; yield 2; yield 3
end
end
e = Trio.new.each
puts e.next
puts e.nextCómo encaja todo
Los enumeradores le ofrecen un control detallado:
- Extraiga valores con
next, consulte el siguiente valor sin avanzar o vuelva al inicio. - Cree enumeradores personalizados con
Enumerator.newy un yielder. - Son Enumerable, por lo que puede usar map/select/take.
odds = Enumerator.new do |y|
n = 1
loop { y << n; n += 2 }
end
p odds.first(4)Comprobación rápida
Compruebe cuánto comprende los objetos Enumerator.
Repaso
Ha aprendido sobre los objetos Enumerator:
- Iteración externa mediante
next,peekyrewind. StopIterationindica el final.- Cree enumeradores personalizados con
Enumerator.new { |y| ... }. - Son Enumerable y pueden ser infinitos.
nums = Enumerator.new { |y| 1.upto(3) { |n| y << n } }
puts nums.next
puts nums.nextPreguntas frecuentes
¿La lección «Objetos Enumerator» es gratis?
Sí — el texto completo de «Objetos Enumerator» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Ruby Academy, actualiza a CoddyKit PRO. El curso de Ruby Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Objetos Enumerator»?
Iteración externa Practicas Ruby Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Ruby Academy?
No se requiere experiencia previa. Ruby Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Objetos Enumerator»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Ruby Academy?
Sí. Cada lección de Ruby Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.