2014-10-04 86 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