Das normale Verhalten bei einem Hash sieht folgendermaßen aus:
[ruby]
h = Hash.new # eine neue Hashinstanz erzeugen
h[5] # => gibt nil zurück
h[‚mein-index‘] # => gibt auch nil zurück
[/ruby]
Bei der ersten Variante für die Rückgabe von Standardwerten kann über den Konstruktor gelöst werden:
[ruby]
h = Hash.new("DEFAULT_VALUE") # eine neue Hashinstanz erzeugen
h[5] # => gibt "DEFAULT_VALUE" zurück
h[‚mein-index‘] # => gibt auch "DEFAULT_VALUE" zurück
[/ruby]
Die zweite Variante wird über einen Rückgabeblock gelöst:
[ruby]
h = Hash.new {|hash, key| (key.respond_to? :to_str) ? "DEFAULT_VALUE" : nil }
h[5] # => gibt nil zurück
h[‚mein-index‘] # => gibt "DEFAULT_VALUE" zurück
[/ruby]
Die beiden Varianten unterscheiden sich dadurch, dass nur bei fehlenden String-Indixes der Statndardwert zurückgegeben wird.