Wie iteriert Rubys Enumerator-Objekt extern über einen internen Iterator?
Gemäß Rubys Dokumentation verwendet das Enumerator-Objekt daseach
method (aufzuzählen), wenn keine Zielmethode für die bereitgestellt wirdto_enum
oderenum_for
Methoden. Nehmen wir als Beispiel den folgenden Affen-Patch und seinen Enumerator
o = Object.new
def o.each
yield 1
yield 2
yield 3
end
e = o.to_enum
loop do
puts e.next
end
Vorausgesetzt, das Enumerator-Objekt verwendet dieeach
Methode, um zu antworten, wannnext
heißt, wie ruft der an?each
Methode aussehen, jedes Malnext
wird genannt? Lädt die Enumeartor-Klasse den gesamten Inhalt von vor?o.each
und erstellt eine lokale Kopie zur Aufzählung? Oder gibt es eine Art Ruby-Magie, die die Operationen bei jeder Ertragsaussage bis aufhängtnext
heißt auf dem enumeartor?
Wenn eine interne Kopie erstellt wird, handelt es sich um eine tiefe Kopie? Was ist mit E / A-Objekten, die für die externe Aufzählung verwendet werden könnten?
Ich benutze Ruby 1.9.2.