Mein Code ist:
%Vor% Innerhalb der Methode gibt puts hash
{ :one => 1, :two => 2, :three => 3 }
zurück, aber wenn hash1
an die Methode übergeben wird, bleibt sie danach unverändert. Es ist, als würde sich die Aufgabe nicht außerhalb der Funktion bewegen.
Ich denke, ich könnte den aktualisierten Hash zurückgeben und den Hash, den ich ändern möchte, außerhalb der Methode setzen:
%Vor%Aber ich verstehe nicht, warum die Aufgabe, die ich dem Hash gebe, nicht außerhalb der Methode bleibt.
Ich habe das, was funktioniert:
%Vor%Das gibt mir, was ich will, wenn diese Methode aufgerufen wird, aber es scheint nur ein wenig übertrieben zu sein, den Hash so zu rekonstruieren.
Ruby übergibt Objekte an Methoden nach Wert, aber der Wert ist der Verweis auf das Objekt. Wenn Sie also hash=temp_hash
in der Methode add_hash
festlegen, gilt diese Änderung nur innerhalb der Methode. Der Wert von Hash außerhalb der Methode ist unverändert.
Wenn Sie möchten, dass der Hash aktualisiert wird, müssen Sie den Hash-Inhalt ersetzen, anstatt den Hash-Wert an einem neuen Objekt neu zu setzen, wie Sie es beim Löschen getan haben, und fügen Sie die Werte erneut hinzu. Sie können dies auch mit der Methode replace
tun.
Es gibt einige gute Diagramme zum Wertübergeben in " Is Ruby nach Referenz oder nach Wert? "
HINWEIS: Diese Antwort ist aus den Zeiten alt, als Ruby 1.8 noch vorhanden war.
Im Allgemeinen bietet die Klasse Hash
in Ruby keine Sortierung. Das Verhalten kann sich bei Ruby-Versionen / Implementierungen unterscheiden.
Siehe auch: Hash-Reihenfolge zwischen Iterationen beibehalten, wenn nicht geändert?
Wenn Sie eine Bestellung aufgeben möchten, müssen Sie die Klasse OrderedHash
verwenden, die über ActiveSupport bereitgestellt wird
Siehe: Ссылка
temp_hash
ist eine lokale Variable, die gelöscht wird, sobald die Funktion zurückkehrt.