所以我有这样一个类:如何命名的对象引用(句柄)动态红宝石
def Word
end
和IM循环直通这样
array.each do |value|
end
一个数组,这个循环我里面要实例化一个对象,用var
value = Word.new
我肯定有一个简单的方法来做到这一点的手柄 - 我只是不知道w ^它是帽子!
谢谢!
所以我有这样一个类:如何命名的对象引用(句柄)动态红宝石
def Word
end
和IM循环直通这样
array.each do |value|
end
一个数组,这个循环我里面要实例化一个对象,用var
value = Word.new
我肯定有一个简单的方法来做到这一点的手柄 - 我只是不知道w ^它是帽子!
谢谢!
要分配的东西动态变量的名字,你需要使用类似eval
:
array.each do |value|
eval "#{value} = Word.new"
end
但检查这是你想要的东西 - 你应该避免使用eval
解决的事情,确实需要不同的数据结构,因为很难调试使用eval创建的错误,并且很容易导致不良行为。例如,你可能真正想要的是词和关联对象的哈希值,例如
words = {}
array.each do |value|
words[value] = Word.new
end
它不会吨Word
对象的污染您的命名空间。
绝对不要做第一个,除非你想引起自己很多额外的麻烦。 – Chuck 2010-06-06 21:58:20
啊,谢谢彼得和查克。我没有想到这样做。是的,我坚持第二个 - 它看起来非常聪明,实际上可以让我做更多。 我只需要一种方法让我的每个“值”(它们都是变量)成为一个Word对象。值的散列不会工作,因为我需要的方法以及值。所以对象的散列 - brillant - 谢谢你们! – RetroNoodle 2010-06-06 22:03:27
根据您要使用的数据结构,你也可以这样做:
# 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 ] }
我不太明白。你说你“想用一个var的句柄实例化一个对象”,但这对我来说并不意味着什么。如果你不能澄清这是什么意思,你至少能解释你期望它有什么作用? – Chuck 2010-06-06 21:57:27
你使用class class创建一个类;结束'不'def词;结束' – horseyguy 2010-06-07 05:41:13
是的,谢谢 - 这是刚刚成为红宝石,并有点脑炸的结果:) – RetroNoodle 2010-06-16 20:26:25