2014-10-04 111 views
1

我想設置一個值給一個變量,其名稱以字符串形式給出。做這個的最好方式是什麼?我想到的第一種方法是,如果條件,如:基於字符串設置類變量

if attribute_string = 'code' 
    @code = val 
elsif attribute_string = 'weight' 
    @weight = val 
... 

但這是醜陋的,似乎是糟糕的編碼風格。有任何想法嗎?

+0

(1)類變量與您的問題相關的方式如何? (2)你的'if'條件總是如此,並且總是會執行第一部分。整個調節沒有意義。 – sawa 2014-10-04 03:14:35

+0

請首先以非編程術語解釋您的問題,這將有助於您和我們理解問題。 – 2014-10-04 14:42:27

回答

2

你可以得到/設置從它的名字一個實例變量使用Object#instance_variable_set

attribute_name = "code" 
val = "value" 
instance_variable_set :"@#{attribute_name}", val 

# Retrieve value with instance_variable_get 
instance_variable_get :"@#{attribute_name}" # => "value" 
+1

請注意,如果變量來自用戶輸入,則可以使用該變量來更改除您打算的變量之外的實例變量。您至少需要通過白名單運行您的屬性名稱。或者,考慮將數據存儲在散列中以保持包含的名稱空間。 – DGM 2014-10-04 18:41:22

1

你應該能夠使用instance_variable_set設置基於字符串的實例變量。以下示例將輸出5

attribute_string = 'code' 
instance_variable_set("@#{attribute_string}", 5) 
puts @code