0Pricing
Ruby Academy · Lección

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.next

Obtener 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.class

Extraer 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.next

StopIteration 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"
end

peek 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.next

Crear 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.next

Enumeradores 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}"
end

Devolver 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.next

Có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.new y 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, peek y rewind.
  • StopIteration indica 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.next

Preguntas 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.

Todas las lecciones de este curso

  1. Escritura de un each personalizado
  2. Inclusión de Enumerable
  3. Enumeradores perezosos
  4. Objetos Enumerator
← Volver a Ruby Academy