我刚刚开始学习 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”。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top