的子類的實例我不能設法Marshal.load
的哈希的子類的Marshal.dump
版實例:加載元帥元帥傾倒的哈希
class MarshalDumpableHash < Hash
def initialize(constructor = {})
if constructor.is_a?(Hash)
super()
update(constructor)
else
super(constructor)
end
end
def marshal_dump
p self
self
end
def marshal_load(hash)
p hash
update(hash)
end
end
h = { asd: 'ciao' }
p MarshalDumpableHash.new(h) #=> {:asd=>"ciao"}
p Marshal.dump(MarshalDumpableHash.new(h)) #=> "\x04\bU:\[email protected]\x00"
p Marshal.load(Marshal.dump(MarshalDumpableHash.new(h))) #=> {} WHY?
這聽起來很奇怪,我的p self
內marshal_dump
方法打印{:asd=>"ciao"}
,而一個所述marshal_load
方法打印{}
我沒有想到在'marshal_dump'裏面返回'self'可能是個問題......謝謝 – mdesantis 2013-02-25 08:46:59