2010-09-29 14 views

Répondre

14

Il suffit de réinitialiser la valeur par défaut:

h.default = nil 

Plus explicitement:

def dumpable_hash(h) 
    return h unless h.default_proc 
    copy = h.clone 
    copy.default = nil # clear the default_proc 
    copy 
end 

Dans Ruby 2.0, vous can aussi écrire h.default_proc = nil si vous préférez. Disponible pour tous les rubis avec require 'backports/2.0.0/hash/default_proc'.

+1

Turns out 'h.default = nil' efface le proc par défaut - c'est tout ce que je avais besoin. Merci! –

+0

Il est également possible de vider les hachages qui ont un objet de valeur par défaut, comme 'Hash.new (42)'. Pas que j'aime avoir des objets de valeur par défaut à moins qu'ils ne soient immuables. –

5

Si vous voulez avoir une copie sans défaut, la façon la plus simple -

Hash[hash_with_defaults]