Ruby Language
Enumeradores
Buscar..
Introducción
Un Enumerator
es un objeto que implementa la iteración de una manera controlada.
En lugar de realizar un bucle hasta que se cumpla alguna condición, el objeto enumera los valores según sea necesario. La ejecución del bucle se detiene hasta que el propietario del objeto solicita el siguiente valor.
Los enumeradores hacen posible la transmisión infinita de valores.
Parámetros
Parámetro | Detalles |
---|---|
yield | Responde al yield , que se presenta como << . El ceder a este objeto implementa la iteración. |
Enumeradores personalizados
Vamos a crear un Enumerator
para los números de Fibonacci .
fibonacci = Enumerator.new do |yielder|
a = b = 1
loop do
yielder << a
a, b = b, a + b
end
end
Ahora podemos usar cualquier método Enumerable
con fibonacci
:
fibonacci.take 10
# => [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
Metodos existentes
Si se llama a un método de iteración como each
sin un bloque, se debe devolver un Enumerator
.
Esto se puede hacer usando el método enum_for
:
def each
return enum_for :each unless block_given?
yield :x
yield :y
yield :z
end
Esto le permite al programador componer operaciones Enumerable
:
each.drop(2).map(&:upcase).first
# => :Z
Rebobinado
Utilice rewind
para reiniciar el enumerador.
ℕ = Enumerator.new do |yielder|
x = 0
loop do
yielder << x
x += 1
end
end
ℕ.next
# => 0
ℕ.next
# => 1
ℕ.next
# => 2
ℕ.rewind
ℕ.next
# => 0