2015-08-18 17 views
0

如何使用變量而不是預定義的名稱來分配ruby的OpenStruct屬性。我可以做到以下幾點,如何使用變量分配ruby的OpenStruct屬性

os = OpenStruct.new 
os.one = 1 
os.two = "Two" 

但是,我該如何做到這一點,屬性名稱是一個變量? 例如:

attr_name = "sand_box" 
os.#{attr_name} = "Play time!" #### this doesn't work 

回答

1
require 'ostruct' 
os = OpenStruct.new 
os.one = 1 
os.two = "Two" 


attr_name = "sand_box" 
os[attr_name] = "Play time!" 

p os #-> #<OpenStruct one=1, two="Two", sand_box="Play time!"> 
+0

的作品!希望官方文件顯示。 – cfpete

+0

@cfpete:[他們這樣做](http://ruby-doc.org/stdlib/libdoc/ostruct/rdoc/OpenStruct.html#method-i-5B-5D-3D)。雖然我猜想通過爲':age'使用變量可以使它更清晰。 – cremno

+0

@cremno,你是對的......我錯過了。感謝您指出! – cfpete

0

或者,你可以只調用setter方法:

os.public_send(:"#{attr_name}=", 'Play time!')