我希望生成一个动态变量,如下所示:
varnum = rand(100000)
value = 5
instance_variable_set("@v" + varnum.to_s, value)
现在,在 IRB 中,如果 varnum 返回 345 - 您可以推断生成的变量是 @v345
但是,在脚本中运行代码 - 你将如何调用它?有没有办法用 @v + varnum.to_s 之类的东西修补变量?
我希望生成一个动态变量,如下所示:
varnum = rand(100000)
value = 5
instance_variable_set("@v" + varnum.to_s, value)
现在,在 IRB 中,如果 varnum 返回 345 - 您可以推断生成的变量是 @v345
但是,在脚本中运行代码 - 你将如何调用它?有没有办法用 @v + varnum.to_s 之类的东西修补变量?
在没有将变量分配给任何东西的情况下,不幸的是,没有确切的方法可以获取它。如果是这种情况,您可以简单地使用instance_variable_get
如果你只使用这种技术一次,你也许可以通过一些间接的方式获得它。即给它一个特殊的名字...... v 是例子
ree-1.8.7-2011.03 :015 > instance_variables
=> ["@v48563", "@prompt"]
您可以使用正则表达式为此添加 grep。
ree-1.8.7-2011.03 :016 > instance_variables.grep(/@v/)
=> ["@v48563"]
instance_variable_get("@v" + varnum.to_s)
这会调用定义的实例变量
好吧,如果您想再次访问该变量,则必须执行以下两项操作之一:
Object#instance_variables
获取实例变量列表,仅取出以 . 开头的变量v
。要在您仍然拥有变量值后访问变量,请使用以下命令:
instance_variable_get("@v#{varnum.to_s}")
不过这里有一个更深层次的问题。你永远不应该,永远,永远动态生成实例变量。如果您需要通过作为对象一部分的随机数访问数据,请使用一个实例变量,例如@vs
,它是将随机数映射到您的值的哈希值。