问题
I've got a Hash with a default proc that I'd like to Marshal to a file, but the default proc prevents me from doing that.
Rather than writing my own _dump and _load methods, is it possible instead to remove the default proc instead? At the point where I'm Marshalling I'm never going to need the default proc again.
回答1:
Just reset the default:
h.default = nil
More explicitly:
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, you can also write h.default_proc = nil if you prefer. Available for all Rubies with require 'backports/2.0.0/hash/default_proc'.
回答2:
In case you would want to have a copy without defaults, the simplest way -
Hash[hash_with_defaults]
来源:https://stackoverflow.com/questions/3818623/marshal-ruby-hash-with-default-proc-remove-the-default-proc