In Ruby versuche ich zwischen den to_enum
und enum_for
Methoden zu verstehen. Bevor ich meine Frage stelle, habe ich einen Beispielcode und zwei Beispiele zur Verfügung gestellt, um mit dem Kontext zu helfen.Unterschiede zwischen [1,2,3] .to_enum und [1,2,3] .enum_for in Ruby
Beispielcode:
# replicates group_by method on Array class
class Array
def group_by2(&input_block)
return self.enum_for(:group_by2) unless block_given?
hash = Hash.new {|h, k| h[k] = [] }
self.each { |e| hash[ input_block.call(e) ] << e }
hash
end
end
Beispiel # 1:
irb (main)> puts [1,2,3].group_by2.inspect
=> #<Enumerator: [1, 2, 3]:group_by2>
In Beispiel # 1: Aufrufe von group_by
auf dem Array [1,2,3]
, ohne in einem Block verläuft, gibt einen Enumerator mit dem Befehl erzeugten self.enum_for(:group_by_2)
.
Beispiel # 2
irb (main)> puts [1,2,3].to_enum.inspect
=> #<Enumerator: [1, 2, 3]:each>
In Beispiel # 2, der Enumerator durch Aufrufen der to_enum
Methode auf dem Array erzeugt wird [1,2,3]
Frage:
die Enumeratoren Do erzeugt in den Beispielen 1 und 2, verhalten sich in irgendeiner Weise anders? Ich kann von den überprüften Ausgaben sehen, dass sie etwas unterschiedliche Bezeichnungen zeigen, aber ich kann irgendeinen Unterschied im Verhalten der Aufzähler finden.
# Output for example #1
#<Enumerator: [1, 2, 3]:each> # label reads ":each"
# Output for example #2
#<Enumerator: [1, 2, 3]:group_by2> # label reads ":group_by2"
@ 7stud danke. Ich wollte nur sicherstellen, dass ich nichts verpasst habe. – amorphid
@amorphid, Die Ruby-Dokumentation war ziemlich gut zu sagen: "Diese Methode ist ein Synonym für Methode A. Siehe Beschreibung für Methode A." Ich würde diese Empfehlung lieber als eine doppelte Beschreibung sehen. – 7stud
Ich lese gerade dein Beispiel neu und habe gerade erkannt, dass man auch '[1,2,3] .to_enum (: foo)' machen kann, was '#' zurückgibt . Hätte ich es gemerkt, wäre meine Frage einfach => Hat das Symbol im Befehl '[1,2,3] .to_enum (: foo)' einen anderen Zweck als den Ersatz 'jedes' mit ': foo' in der Ausgabe? Die [Docs für die Enumerator-Klasse] (http://www.ruby-doc.org/core-2.1.2/Enumerator.html) sagen nichts darüber, zumindest nicht, dass ich sehen kann. –
amorphid