我期待生成一个动态变量,如以下几点:如何调用动态生成的实例?
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来修补一个变量?
好吧,如果你曾经想再次访问的变量,你必须做两件事情之一:
Object#instance_variables
获得实例变量的列表,并采取了只有那些与v
开始。要访问一个变量一旦你还是有它的价值,使用此:
instance_variable_get("@v#{varnum.to_s}")
这里有一个更深层次的问题,但。你应该从未,不断,不断动态生成实例变量。如果你需要通过一个随机数作为对象的一部分来访问数据,有一个实例变量,说@vs
,这是一个散列映射随机数到你的价值。
instance_variable_get("@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_variables是最好的! – Naveed
很好的答案。我仍然认为,首先这样做是一个坏主意。 +1。 – Linuxios
我同意。但是在黑客攻击中没有任何伤害! – sohaibbbhatti