Ruby Language
Enumeratoren
Suche…
Einführung
Ein Enumerator
ist ein Objekt, das die Iteration auf kontrollierte Weise implementiert.
Anstatt die Schleife zu wiederholen, bis eine Bedingung erfüllt ist, listet das Objekt die erforderlichen Werte auf. Die Ausführung der Schleife wird angehalten, bis der nächste Wert vom Eigentümer des Objekts angefordert wird.
Enumeratoren ermöglichen unendliche Werte.
Parameter
Parameter | Einzelheiten |
---|---|
yield | Reagiert auf yield , die als << als Alias bezeichnet wird. Bei der Ausgabe dieses Objekts wird die Iteration implementiert. |
Benutzerdefinierte Enumeratoren
Erstellen wir einen Enumerator
für Fibonacci-Zahlen .
fibonacci = Enumerator.new do |yielder|
a = b = 1
loop do
yielder << a
a, b = b, a + b
end
end
Wir können jetzt jede beliebige Enumerable
Methode mit fibonacci
:
fibonacci.take 10
# => [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
Bestehende Methoden
Wenn eine Iterationsmethode wie each
ohne Block aufgerufen wird, sollte ein Enumerator
zurückgegeben werden.
Dies kann mit der Methode enum_for
werden:
def each
return enum_for :each unless block_given?
yield :x
yield :y
yield :z
end
Dies ermöglicht dem Programmierer, Enumerable
Operationen zu Enumerable
:
each.drop(2).map(&:upcase).first
# => :Z
Zurückspulen
Verwenden Sie rewind
, um den Enumerator neu zu starten.
ℕ = Enumerator.new do |yielder|
x = 0
loop do
yielder << x
x += 1
end
end
ℕ.next
# => 0
ℕ.next
# => 1
ℕ.next
# => 2
ℕ.rewind
ℕ.next
# => 0