3

如何使用 OpenStruct 的 marshal_load 实用程序?它似乎没有按预期工作。

文档给出了这个例子,但它似乎不起作用。

require 'ostruct'

event = OpenStruct.new
hash = { 'time' => Time.now, 'title' => 'Birthday Party' }
event.marshal_load(hash)
event.title # => nil

如果不是这种方式,我如何将哈希加载到 OpenStruct 中(不使用构造函数)?

对于上下文:我正在从 YAML 文件中加载哈希并将其加载到 OpenStruct 子类的现有实例中。

4

2 回答 2

5

尝试使用基于符号的哈希。这对我有用。

#works.rb

hash = { :time => Time.now, :title => 'Birthday Party' }
event.marshal_load(hash)
于 2013-01-15T05:06:50.470 回答
4

marshal_load方法的存在是为了提供对Marshal.load.

event = OpenStruct.new({ 'time' => Time.now, 'title' => 'Birthday Party' })
binary = Marshal.dump(event)
loaded = Marshal.load(binary) # the OpenStruct

以编程方式将哈希加载到结构中的最简单方法是使用发送:

event = OpenStruct.new
hash.each do |key, value|
  event.send("#{key}=", value)
end
于 2013-01-15T06:39:15.070 回答