所以我有一个这样的课程:
def Word
end
并通过像这样的数组循环
array.each do |value|
end
在该循环中,我想用var
的句柄实例化一个对象value = Word.new
我确信有一种简单的方法可以做到这一点 - 我只是不知道它是什么!
谢谢!
答案 0 :(得分:2)
要将内容分配给动态变量名称,您需要使用eval
:
array.each do |value|
eval "#{value} = Word.new"
end
但是检查这是你想要的 - 你应该避免使用eval
来解决真正需要不同数据结构的事情,因为很难调试用eval创建的错误,并且很容易导致不希望的行为。例如,您可能真正想要的是单词和关联对象的哈希,例如
words = {}
array.each do |value|
words[value] = Word.new
end
不会使用大量Word
个对象污染您的命名空间。
答案 1 :(得分:2)
根据您要使用的数据结构,您也可以这样做:
# will give you an array:
words = array.map { |value| Word.new(value) }
# will give you a hash (as in Peter's example)
words = array.inject({}) { |hash, value| hash.merge value => Word.new }
# same as above, but more efficient, using monkey-lib (gem install monkey-lib)
words = array.construct_hash { |value| [value, Word.new ] }