在OpenStruct中使用marshal_load

时间:2013-01-15 04:50:59

标签: ruby openstruct

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

文档提供this example,但似乎不起作用。

require 'ostruct'

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

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

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

2 个答案:

答案 0 :(得分:5)

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

#works.rb

hash = { :time => Time.now, :title => 'Birthday Party' }
event.marshal_load(hash)

答案 1 :(得分:4)

marshal_load方法可以为Marshal.load提供支持。

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

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

event = OpenStruct.new
hash.each do |key, value|
  event.send("#{key}=", value)
end