Mit Ruby können Sie Standardwerte für Hashes definieren:
%Vor% Die Zuweisung eines Werts wird angezeigt, wenn der Hash angezeigt wird, ein geänderter Standardwert jedoch nicht. Wo ist 'bad'
?
'bad'
erscheint, wenn wir explizit nachfragen.
Warum wird der geänderte Standardwert nicht angezeigt, wenn der Hash angezeigt wird?
Der Standardwert von Hash funktioniert nicht so, wie Sie es erwarten. Wenn Sie h[k]
sagen, läuft der Prozess folgendermaßen ab:
k
-Schlüssel haben, geben Sie ihren Wert zurück. Beachten Sie, dass (2) und (3) überhaupt nichts über das Einfügen von k
in den Hash sagen. Der Standardwert setzt im Wesentlichen h[k]
in folgendes um:
Wenn Sie einfach auf einen nicht vorhandenen Schlüssel zugreifen und den Standardwert zurück erhalten, wird der fehlende Schlüssel nicht zum Hash hinzugefügt.
Außerdem, alles in der Form:
%Vor%ist fast immer ein Fehler, da Sie für alle Standardwerte genau das gleiche Array oder Hash verwenden. Zum Beispiel, wenn Sie dies tun:
%Vor% Dann werden h[:i]
, h[:j]
, ... alle ['a', 'b']
zurückgeben und das ist selten was du willst.
Ich glaube, Sie suchen nach der Blockform des Vorschlagswerts :
%Vor%Das wird zwei Dinge tun:
Was passiert ist, ist, dass Sie den Standardwert des Hashs geändert haben, indem Sie push
inging 'unhappy' auf h['bad']
gesetzt haben. Was Sie nicht getan haben wurde tatsächlich dem Hash "schlecht" hinzugefügt, weshalb es bei der Überprüfung von h
nicht angezeigt wird.
Nach all dem Code, den du geliefert hast, habe ich Folgendes versucht:
%Vor%Was mir sicherlich nahelegt, dass der Standardwert geändert wurde. Als Antwort auf Ihre Frage "Warum erscheint der geänderte Standardwert nicht, wenn der Hash angezeigt wird?" Müssten Sie ein Element hinzufügen und nicht nur darauf zugreifen:
%Vor%