我想設置一個值給一個變量,其名稱以字符串形式給出。做這個的最好方式是什麼?我想到的第一種方法是,如果條件,如:基於字符串設置類變量
if attribute_string = 'code'
@code = val
elsif attribute_string = 'weight'
@weight = val
...
但這是醜陋的,似乎是糟糕的編碼風格。有任何想法嗎?
我想設置一個值給一個變量,其名稱以字符串形式給出。做這個的最好方式是什麼?我想到的第一種方法是,如果條件,如:基於字符串設置類變量
if attribute_string = 'code'
@code = val
elsif attribute_string = 'weight'
@weight = val
...
但這是醜陋的,似乎是糟糕的編碼風格。有任何想法嗎?
你可以得到/設置從它的名字一個實例變量使用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"
請注意,如果變量來自用戶輸入,則可以使用該變量來更改除您打算的變量之外的實例變量。您至少需要通過白名單運行您的屬性名稱。或者,考慮將數據存儲在散列中以保持包含的名稱空間。 – DGM 2014-10-04 18:41:22
你應該能夠使用instance_variable_set設置基於字符串的實例變量。以下示例將輸出5
:
attribute_string = 'code'
instance_variable_set("@#{attribute_string}", 5)
puts @code
(1)類變量與您的問題相關的方式如何? (2)你的'if'條件總是如此,並且總是會執行第一部分。整個調節沒有意義。 – sawa 2014-10-04 03:14:35
請首先以非編程術語解釋您的問題,這將有助於您和我們理解問題。 – 2014-10-04 14:42:27