21

我刚开始学习 Ruby,我编写了一个程序,它生成一些数字并将它们分配给变量@one、@two、@three 等。然后用户可以通过输入变量的名称来指定要更改的变量(例如一)。然后我需要做类似'@[valueofinout] = asd'的事情。我将如何做到这一点,有没有更好的方法,因为我正在考虑的方式似乎气馁?我找到了

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

但我不完全理解为什么需要第二行。就我而言,我会使用类似的东西

@one = "21"
input = "one"
input = "@" + input
changeto = "22"
eval(input) -> changeto
4

2 回答 2

34

使用instance_variable_set( ruby​​doc )

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 
于 2010-03-27T17:27:19.750 回答
2

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

input = instance_variable_get("@one")

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

于 2010-03-27T17:07:08.103 回答