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

プログラムでハッシュを構造体にロードする最も簡単な方法は、sendを使用することです。

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