【发布时间】:2014-11-25 19:22:36
【问题描述】:
Ruby 中的序列化可以通过内置的Marshal 模块完成。
它提供了转储和加载对象的方法。
我正在编写一些序列化,想知道如何在不实际调用构造函数的情况下加载对象并恢复其所有属性?
例如,假设我有一个班级
class Test
def initialize(id)
@id = id
end
end
假设我将它序列化为(假设一个非常简化的方案,一般情况下可能不起作用)
{
"Test": {
"id": 3
}
}
当我想重新加载它时,我想我只需实例化一个新的Test 对象并设置它的属性。但是,调用new 方法会抛出异常,因为我还没有传入ID。事实上,我还没有读到 ID,一般来说,构造函数可以接受任意数量的参数,我不想为每个类编写自定义逻辑。
当您通过Marshal.load 加载对象时,它会以某种方式工作。它是如何工作的?
【问题讨论】:
标签: ruby serialization