Ruby编程:Marshal、MatchData、Math、Method和Module模块详解
1. Marshal模块
1.1 概述
Marshal库可将Ruby对象集合转换为字节流,便于将其存储在当前活动脚本之外,后续还能读取这些数据并重构原始对象。
1.2 版本号
Marshaled数据会存储主版本号和次版本号。正常使用时,Marshal只能加载主版本号相同且次版本号相等或更低的数据。若设置了Ruby的“verbose”标志,主版本号和次版本号必须完全匹配。可以通过读取Marshaled数据的前两个字节来提取版本号。示例代码如下:
str = Marshal.dump("thing")
RUBY_VERSION
# => "1.8.2"
str[0]
# => 4
str[1]
# => 8
1.3 不可转储的对象
某些对象无法进行转储,若要转储的对象包含绑定、过程或方法对象、IO类的实例、单例对象,或者尝试转储匿名类或模块,会引发TypeError。
1.4 自定义序列化
若类有特殊的序列化需求,或者包含无法序列化的对象,可以实现自己的序列化策略。在Ruby 1.8之前,需定义 _dump
和 _load
方法。Ruby 1.8引入了更灵活的接口,使用实例方法 marshal_dump
和 marshal_load
。示例代码如