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