Da Hashes nicht von Natur aus geordnet sind, gibt es keine Vorstellung von Anhängen. Ruby-Hashes seit 1.9 behalten jedoch die Einfügereihenfolge bei. Hier finden Sie Möglichkeiten zum Hinzufügen neuer Schlüssel / Wert-Paare.
Die einfachste Lösung ist
h[:key] = "bar"
Wenn Sie eine Methode wünschen, verwenden Sie store
:
h.store(:key, "bar")
Wenn Sie wirklich, wirklich einen "Schaufel" -Operator ( <<
) verwenden möchten , wird dieser tatsächlich an den Wert des Hash als Array angehängt, und Sie müssen den Schlüssel angeben:
h[:key] << "bar"
Das Obige funktioniert nur, wenn der Schlüssel vorhanden ist. Um einen neuen Schlüssel anzuhängen, müssen Sie den Hash mit einem Standardwert initialisieren. Dies können Sie folgendermaßen tun:
h = Hash.new {|h, k| h[k] = ''}
h[:key] << "bar"
Sie könnten versucht sein, Hash-Affen zu patchen, um einen Schaufeloperator einzuschließen, der so funktioniert, wie Sie es geschrieben haben:
class Hash
def <<(k,v)
self.store(k,v)
end
end
Dies erbt jedoch nicht den "syntaktischen Zucker", der in anderen Kontexten auf den Schaufeloperator angewendet wird:
h << :key, "bar"
h.<< :key, "bar"
h[:key] = "bar"
?