2

如何使用字符串或符号来创建新变量 || 对象?假设我想要一个已经制作好的物品类的 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 的人的引用,但这些似乎并不能以我能理解的方式解决我的问题。

4

2 回答 2

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

我建议只坚持使用数组。

更新: 根据您的评论,听起来您的实际用例涉及不连续的所需变量名称。在这种情况下,我会使用哈希而不是数组。

可以这样想:无论您希望将任何字符串用作局部变量的名称,只需将其用作局部哈希中的键即可。我想不出任何比你正在尝试的更好的例子,即使你正在尝试的工作有效。

于 2013-06-16T00:10:12.100 回答
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"

但是请注意,这不会创建局部变量。

于 2013-06-16T00:59:44.133 回答