2010-09-29 17 views

risposta

14

Basta azzerare il valore di default:

h.default = nil 

Più esplicitamente:

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

In Ruby 2.0, si can scrivere anche h.default_proc = nil, se si preferisce. Disponibile per tutti i rubini con require 'backports/2.0.0/hash/default_proc'.

+1

Risulta 'h.default = quelle negative cancella il proc di default - è tutto quello che mi serviva. Grazie! –

+0

È anche possibile eseguire il dump degli hash che hanno un oggetto valore predefinito, ad esempio 'Hash.new (42)'. Non che mi piaccia avere oggetti con valore predefinito a meno che non siano immutabili. –

5

Nel caso in cui si vorrebbe avere una copia senza default, il modo più semplice -

Hash[hash_with_defaults]