0

我希望生成一个动态变量,如下所示:

varnum = rand(100000)
value = 5
instance_variable_set("@v" + varnum.to_s, value)

现在,在 IRB 中,如果 varnum 返回 345 - 您可以推断生成的变量是 @v345

但是,在脚本中运行代码 - 你将如何调用它?有没有办法用 @v + varnum.to_s 之类的东西修补变量?

4

3 回答 3

4

在没有将变量分配给任何东西的情况下,不幸的是,没有确切的方法可以获取它。如果是这种情况,您可以简单地使用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"] 
于 2012-07-03T13:24:54.507 回答
1
instance_variable_get("@v" + varnum.to_s)

这会调用定义的实例变量

于 2012-07-03T13:24:02.280 回答
1

好吧,如果您想再次访问该变量,则必须执行以下两项操作之一:

  • 保留您动态生成的所有实例变量的数组
  • 用于Object#instance_variables获取实例变量列表,仅取出以 . 开头的变量v

要在您仍然拥有变量值后访问变量,请使用以下命令:

instance_variable_get("@v#{varnum.to_s}")

不过这里有一个更深层次的问题。你永远不应该永远永远动态生成实例变量。如果您需要通过作为对象一部分的随机数访问数据,请使用一个实例变量,例如@vs,它是将随机数映射到您的值的哈希值。

于 2012-07-03T13:25:27.107 回答