2012-07-03 30 views
0

我期待生成一个动态变量,如以下几点:如何调用动态生成的实例?

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

现在,IRB,如果VARNUM返回345 - 你可以推断出产生的变量是@ v345

然而,在脚本中运行代码 - 您将如何调用它?有没有办法用@v + varnum.to_s来修补一个变量?

回答

1

好吧,如果你曾经想再次访问的变量,你必须做两件事情之一:

  • 请将所有实例变量数组,你动态生成
  • 使用Object#instance_variables获得实例变量的列表,并采取了只有那些与v开始。

要访问一个变量一旦你还是有它的价值,使用此:

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

这里有一个更深层次的问题,但。你应该从未不断不断动态生成实例变量。如果你需要通过一个随机数作为对象的一部分来访问数据,有一个实例变量,说@vs,这是一个散列映射随机数到你的价值。

1
instance_variable_get("@v" + varnum.to_s) 

这就要求所定义的实例变量

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"] 
+1

真棒!太好了,但是instance_variables是最好的! – Naveed

+1

很好的答案。我仍然认为,首先这样做是一个坏主意。 +1。 – Linuxios

+0

我同意。但是在黑客攻击中没有任何伤害! – sohaibbbhatti