Marshal ruby​​ hash with default proc – 删除默认的proc?

我有一个带有默认触发器的Hash,我想将Marshal设置为一个文件,但是默认的proc会阻止我这样做。

而不是编写我自己的_dump_load方法,而不是删除默认的proc而不是? 在我编组时,我永远不会再需要默认的proc。

只需重置默认值:

 h.default = nil 

更明确地说:

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

在Ruby 2.0中,如果您愿意,还可以编写h.default_proc = nil 。 适用于所有require 'backports/2.0.0/hash/default_proc'

如果你想要一个没有默认值的副本,最简单的方法 –

 Hash[hash_with_defaults]