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

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

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

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

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

使用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 

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

 input = instance_variable_get("@one") 

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