当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Ruby Marshal.load用法及代码示例


本文简要介绍ruby语言中 Marshal.load 的用法。

用法

load(source, proc = nil, freeze: false) → obj
也别名为:restore

返回将源中的序列化数据转换为 Ruby 对象(可能带有关联的从属对象)的结果。 source 可以是 IO 的实例或响应to_str 的对象。如果指定了 proc,则每个对象都将被传递给 proc,因为该对象正在被反序列化。

切勿将不受信任的数据(包括用户提供的输入)传递给此方法。请参阅概述了解更多详情。

如果传递freeze: true 参数,反序列化的对象将被深度冻结。请注意,由于冻结的字符串重复数据删除,它可能会导致更有效的内存使用:

serialized = Marshal.dump(['value1', 'value2', 'value1', 'value2'])

deserialized = Marshal.load(serialized)
deserialized.map(&:frozen?)
# => [false, false, false, false]
deserialized.map(&:object_id)
# => [1023900, 1023920, 1023940, 1023960] -- 4 different objects

deserialized = Marshal.load(serialized, freeze: true)
deserialized.map(&:frozen?)
# => [true, true, true, true]
deserialized.map(&:object_id)
# => [1039360, 1039380, 1039360, 1039380] -- only 2 different objects, object_ids repeating

相关用法


注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Marshal.load。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。