Ruby 中的 Marshal 与正则表达式使用指南
1. Marshal 与单例对象处理
在 Ruby 中,使用 Marshal 进行对象的序列化和反序列化时,对于单例对象会有一些特殊情况。当通过加载保存的数据来重建对象时,新对象将是 Object 的标准实例,它可能包含额外的实例变量,但不再是原始的单例对象,也就无法访问单例中定义的方法。
1.1 基本的 Marshal 保存与加载
以下是一个简单的示例代码,展示了如何使用 Marshal 保存和加载对象:
class X
def marshal_dump
[@x]
end
def marshal_load(data)
@x = data[0]
end
end
ob = X.new
class << ob
def xxx( aStr )
@x = aStr
end
end
ob.xxx( "hello" )
p( ob )
File.open( 'test2.sav', 'w' ){ |f|
Marshal.dump( ob, f )
}
ob.xxx( "new string" )
p( ob )
File.open( 'test2.sav' ){ |f|
ob = Marshal.load(f)
}
p( ob )
运行这段代码,输出结果如下:
#<X:0x2b8
超级会员免费看
订阅专栏 解锁全文
538

被折叠的 条评论
为什么被折叠?



