Marshal.load
ハッシュのサブクラスのMarshal.dump
edインスタンスを管理できません:
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:\x18MarshalDumpableHash@\x00"
p Marshal.load(Marshal.dump(MarshalDumpableHash.new(h))) #=> {} WHY?
メソッドの内部が印刷されるのに対し、メソッドのp self
内部が印刷されるのは奇妙に聞こえますmarshal_dump
{:asd=>"ciao"}
marshal_load
{}