22、Ruby 中的 Marshal 与正则表达式使用指南

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值