ecco un trucco intelligente per consentire hash autovivificazione in Ruby (tratto da sfaccettature):rubino hash autovivificazione (sfaccettature)
# File lib/core/facets/hash/autonew.rb, line 19
def self.autonew(*args)
leet = lambda { |hsh, key| hsh[key] = new(&leet) }
new(*args,&leet)
end
Anche se funziona (ovviamente), lo trovo davvero frustrante che posso' t capire come questa due fodera fa quello che fa.
il leet viene inserito come valore predefinito. Quindi, accedendo semplicemente a h['new_key']
in qualche modo, viene visualizzato e creato 'new_key' => {}
Ora, mi aspetto che l'oggetto valore di default sia h['new_key']
anziché valutarlo. Cioè, 'new_key' => {}
non viene creato automaticamente. Quindi come viene effettivamente chiamato leet? Soprattutto con due parametri?
Ottima risposta. – Pesto
In effetti lo è. Questo, in particolare, mi insegnerà a non riferirmi mai più a RubyBook (fornito con una distribuzione standard di ruby windows), dal momento che non ha menzionato quel piccolo fatto irrilevante su blocchi e nuovi. – artemave