在Ruby中使用变量的值作为另一个变量名

时间:2010-03-27 17:01:54

标签: ruby variables dynamic-variables

我刚开始学习Ruby,我编写了一个生成一些数字并将它们分配给变量@ one,@ two,@ three等的程序。用户可以通过输入变量来指定要更改的变量名字(例如一个)。然后我需要做'@ [valueofinout] = asd'之类的事情。我怎么会这样做,并且有更好的方式,因为我想的方式似乎被劝阻了?我找到了

x = "myvar"
myvar = "hi"
eval(x) -> "hi"

但我不完全理解为什么需要第二行。在我的情况下,我会使用像

这样的东西
@one = "21"
input = "one"
input = "@" + input
changeto = "22"
eval(input) -> changeto

2 个答案:

答案 0 :(得分:31)

使用instance_variable_setrubydoc

instance_variable_set("@" + varname, value)

但在大多数情况下,您应该将正常的Ruby变量与用户交互的变量分开。如何创建用户变量的哈希值,例如

@uservars = { 'one' => 1, 'two' => 2 }
two = @uservars['two']   # Look up 'two' variable

varname = "myvar"
@uservars[varname] = 5   # Set a variable by name
value = @uservars[varname]  # Get a variable by name 

答案 1 :(得分:2)

可以通过此方法检索实例变量:

input = instance_variable_get("@one")

在此之后,在您的情况下,您将input等于“21”。