2013-04-26 72 views
0

我想我曾經在rails項目中看到過一次很好的解決方案。這個解決方案是建立在我認爲的軌道上。在軌道中使用類似對象的散列

我想要得到的是一個hashlike對象,但這是這樣的:

jar = Jar.new #no defined methods 'name' in it! 

jar.name #returns nil 
jar.name = 'fu' 
jar.name #return 'fu' 

其中name可一切可能很像一個哈希作品。我不想預先定義它!

有沒有一個幫助類,這樣做在軌道或類似的東西?

回答

3

您可以使用OpenStruct這是Ruby的核心:

require 'ostruct' 

person = OpenStruct.new 
person.name = "John Smith" 
person.age  = 70 
person.pension = 300 

puts person.name  # -> "John Smith" 
puts person.age  # -> 70 
puts person.address # -> nil 

而且,有一個看documentation

+0

同樣的答案,+1,即使稍微在我之後;) – apneadiving 2013-04-26 07:05:18

+1

我以爲它是在Ruby Std-lib中。 – 2013-04-26 07:06:22

1

您可以使用openstruct:

require 'ostruct' 
=> true 
o = OpenStruct.new 
=> #<OpenStruct> 
o.foo 
=> nil 
o.foo= 1 
=> 1 
o.foo 
=> 1