所以我有這樣一個類:如何命名的對象引用(句柄)動態紅寶石
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