我刚开始学习Ruby,我编写了一个生成一些数字并将它们分配给变量@ one,@ two,@ three等的程序。用户可以通过输入变量来指定要更改的变量名字(例如一个)。然后我需要做'@ [valueofinout] = asd'之类的事情。我怎么会这样做,并且有更好的方式,因为我想的方式似乎被劝阻了?我找到了
x = "myvar"
myvar = "hi"
eval(x) -> "hi"
但我不完全理解为什么需要第二行。在我的情况下,我会使用像
这样的东西@one = "21"
input = "one"
input = "@" + input
changeto = "22"
eval(input) -> changeto
答案 0 :(得分:31)
使用instance_variable_set
(rubydoc)
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”。