2010-09-29 6 views

Odpowiedz

14

Wystarczy przywrócić domyślne:

h.default = nil 

Ściślej:

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

W Ruby 2.0, ty can również napisać h.default_proc = nil jeśli wolisz. Dostępne dla wszystkich Rubinów z require 'backports/2.0.0/hash/default_proc'.

+1

Okazuje się 'h.default = zerowe czyści domyślny proc - to wszystko, co potrzebne. Dzięki! –

+0

Możliwe jest również zrzuty skrótów, które mają domyślny obiekt wartości, na przykład 'Hash.new (42)'. Nie to, że lubię mieć domyślne obiekty wartości, chyba że są niezmienne. –

5

W przypadku byłoby chcesz mieć kopię bez zobowiązań, najprostszy sposób -

Hash[hash_with_defaults]