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

时间:2010-09-29 03:59:54

标签: ruby hash marshalling

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

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

2 个答案:

答案 0 :(得分:14)

只需重置默认值:

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中,如果您愿意,can也会写h.default_proc = nil。适用于require 'backports/2.0.0/hash/default_proc'的所有红宝石。

答案 1 :(得分:5)

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

Hash[hash_with_defaults]