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