如何使用字符串或符号创建新变量||对象?假设我想要一个已经制作的项目类的5个唯一对象;
for x in 1..5
item_x = item.new() #where x is obviously the number value of the iterator
end
我尝试过以这种方式使用eval():
for x in 1..5
eval( "item_" << x << "= item.new()")
end
希望将我想要执行的字符串放入eval中,就好像把它放到代码中一样。
我已经搜索了动态对象创建,并没有找到任何人有这个问题,对不起,如果这是平凡的东西。我找到了使用.const_get和Openstruct的人的引用,但这些似乎没有以我能理解的方式解决我的问题。
答案 0 :(得分:3)
您有什么理由不能将对象存储在数组中吗?这将使它们更容易创建和访问:
items = []
5.times do
items << Item.new()
end
然后代替item_1
到item_5
,item[0]
到item[4]
。
那就是说,如果你确实需要/想要做的事情,instance_variable_set
是一个选项,如果实例变量(@
)是可以的:
for x in 1..5
self.instance_variable_set("@item_#{x}", Item.new())
end
我建议只是坚持使用数组。
更新:根据您的评论,听起来您的实际用例涉及不连续的所需变量名称。在这种情况下,我使用Hash而不是数组。
以这种方式思考:无论您希望将哪个字符串用作局部变量的名称,只需将其用作本地哈希中的键即可。我无法想到任何不会比你尝试的更好的例子,即使你正在尝试的是什么。
答案 1 :(得分:1)
您可以使用instance_variable_set以您描述的方式创建实例变量:
for x in 1..5
variable_name = "item_#{x}"
instance_variable_set("@#{variable_name}", "value to assign to variable")
end
puts @item_1 #=> "value assigned to item_1"
但请注意,这将不创建局部变量。