0Pricing
Ruby Academy · Lektion

Enumerator-Objekte

Externe Iteration

Enumerator-Objekte ist eine kostenlose Ruby Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Ruby Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Ruby Academy-Kurs umfasst insgesamt 4 Lektionen.

Externe Iteration

Ein Enumerator ist ein Objekt, das eine Iteration darstellt. Er unterstützt die externe Iteration: Sie rufen Werte mit next einzeln ab, statt each einen Block zu übergeben.

enum = [10, 20, 30].each
puts enum.next
puts enum.next

Einen Enumerator erhalten

Rufen Sie eine Iteratormethode wie each ohne Block auf, erhalten Sie einen Enumerator, ohne dass die Iteration ausgeführt wird.

enum = [1, 2, 3].each
puts enum.class

Mit next Werte abrufen

next gibt bei jedem Aufruf das nächste Element zurück. Der Enumerator merkt sich seine Position.

letters = ["a", "b", "c"].each
puts letters.next
puts letters.next
puts letters.next

StopIteration am Ende

Wenn keine Werte mehr vorhanden sind, löst next StopIteration aus. Sie können diese Ausnahme abfangen, um die Iteration sauber zu beenden.

enum = [1, 2].each
begin
  loop { puts enum.next }
rescue StopIteration
  puts "done"
end

peek und rewind

peek betrachtet den nächsten Wert, ohne die Position weiterzuschieben; rewind setzt die Position auf den Anfang zurück.

enum = [5, 6, 7].each
puts enum.peek
puts enum.next
enum.rewind
puts enum.next

Benutzerdefinierte Enumerator-Objekte erstellen

Erstellen Sie einen eigenen Enumerator mit Enumerator.new. Der Block erhält einen Yielder y; übergeben Sie Werte mit y << oder 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

Unendliche Enumerator-Objekte

Da sie auf Abruf basieren, können benutzerdefinierte Enumerator-Objekte unendlich sein. Sie nehmen nur so viele Werte, wie Sie benötigen.

counter = Enumerator.new do |y|
  i = 1
  loop { y << i; i += 1 }
end
p counter.first(5)

Enumerator-Objekte sind Enumerable

Ein Enumerator bindet Enumerable ein, sodass auch alle üblichen Methoden (map, select, take) funktionieren und interne sowie externe Iteration kombiniert werden können.

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 fügt jedem Enumerator einen Index hinzu, wahlweise beginnend mit einer benutzerdefinierten Zahl.

["x", "y", "z"].each.with_index(1) do |item, i|
  puts "#{i}: #{item}"
end

Einen Enumerator aus each zurückgeben

Geben Sie in Ihren eigenen Klassen to_enum(:each) (oder enum_for) zurück, wenn kein Block angegeben wurde, damit Aufrufer extern iterieren können.

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

Alles zusammenführen

Enumeratoren geben Ihnen eine fein abgestufte Kontrolle:

  • Rufen Sie Werte mit next ab, sehen Sie den nächsten Wert an oder spulen Sie zurück.
  • Erstellen Sie eigene Enumerator-Objekte mit Enumerator.new und einem Yielder.
  • Sie sind Enumerable, daher funktionieren map/select/take alle.
odds = Enumerator.new do |y|
  n = 1
  loop { y << n; n += 2 }
end
p odds.first(4)

Kurzer Test

Testen Sie Ihr Verständnis von Enumerator-Objekten.

Zusammenfassung

Sie haben Enumerator-Objekte kennengelernt:

  • Externe Iteration mit next, peek und rewind.
  • StopIteration signalisiert das Ende.
  • Erstellen Sie eigene Objekte mit Enumerator.new { |y| ... }.
  • Sie sind Enumerable und können unendlich sein.
nums = Enumerator.new { |y| 1.upto(3) { |n| y << n } }
puts nums.next
puts nums.next

Häufig gestellte Fragen

Ist die Lektion „Enumerator-Objekte“ kostenlos?

Ja — der vollständige Text von „Enumerator-Objekte“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Ruby Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Ruby Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Enumerator-Objekte“?

Externe Iteration Du übst Ruby Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Ruby Academy zu starten?

Keine Vorkenntnisse erforderlich. Ruby Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Enumerator-Objekte“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Ruby Academy-Lektion Code schreiben und ausführen?

Ja. Jede Ruby Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Eigenes each schreiben
  2. Enumerable einbinden
  3. Faule Enumeratoren
  4. Enumerator-Objekte
← Zurück zu Ruby Academy