在 Ruby 中使用变量的值作为另一个变量名称
-
22-09-2019 - |
题
我刚刚开始学习 Ruby,我编写了一个程序,可以生成一些数字并将它们分配给变量 @one、@two、@ Three 等。然后,用户可以通过输入变量的名称(例如,一个)来指定要更改的变量。然后我需要做类似“@[valueofinout] = asd”的事情。我该如何做到这一点,有没有更好的方法,因为我想到的方式似乎不被鼓励?我发现了
x = "myvar"
myvar = "hi"
eval(x) -> "hi"
但我不完全理解为什么需要第二行。就我而言,我会使用类似的东西
@one = "21"
input = "one"
input = "@" + input
changeto = "22"
eval(input) -> changeto
解决方案
使用 instance_variable_set
(红宝石文档)
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”。
不隶属于 StackOverflow