我想设置一个值给一个变量,其名称以字符串形式给出。做这个的最好方式是什么?我想到的第一种方法是,如果条件,如:基于字符串设置类变量
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