我正在寻找生成动态变量,如下所示:
varnum = rand(100000)
value = 5
instance_variable_set("@v" + varnum.to_s, value)
现在,在IRB中,如果varnum返回345 - 您可以推断生成的变量是@ v345
但是,在脚本中运行代码 - 您将如何调用它?有没有办法用@v + varnum.to_s?
修补变量答案 0 :(得分: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 :(得分:1)
instance_variable_get("@v" + varnum.to_s)
这会调用已定义的实例变量
答案 2 :(得分:1)
好吧,如果您想再次访问该变量,则必须执行以下两项操作之一:
Object#instance_variables
获取实例变量列表,并仅取出以v
开头的变量。要在变量仍具有值后访问变量,请使用:
instance_variable_get("@v#{varnum.to_s}")
但这里有一个更深层次的问题。你应该从不,永远,永远动态生成实例变量。如果您需要通过随机数访问数据作为对象的一部分,请使用一个实例变量,比如@vs
,这是一个哈希映射随机数值。