假設我可以構造一個匹配現有類的字符串,我該如何調用它?如何在Rails中動態調用或調用類?
例如,我有幾類:
- MyClass1的
- MyClass2
- MyClass3
而且我想通過構建他們的名字相匹配的字符串動態調用它們中的每。如果他們都有方法「方法」,我怎麼做這樣的事?:
(1..3).each do |n|
("MyClass"+n).methods
end
假設我可以構造一個匹配現有類的字符串,我該如何調用它?如何在Rails中動態調用或調用類?
例如,我有幾類:
而且我想通過構建他們的名字相匹配的字符串動態調用它們中的每。如果他們都有方法「方法」,我怎麼做這樣的事?:
(1..3).each do |n|
("MyClass"+n).methods
end
constantize
符合該法案。你可以閱讀更多關於它here。在你的情況下,它會是這樣的:
(1..3).each do |n|
"MyClass#{n}".constantize.methods
end
謝謝!跟隨zsquare的答案,我結束了兩個答案! 克拉斯= Object.const_get「MyClassName」 - 或 - 克拉斯=「MyClassName」 .constantize 兩種方法都返回不管什麼牌子的樂趣,你感興趣的類。 雖然四處尋找,我也發現Inflector類可以方便地動態構建類名。 http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-camelize – comb 2012-07-15 07:59:57
你也可以做 -
(1..3).each {|n| eval "MyClass#{n}.methods"}
確定匿名類數組中的不適合?只要您通過迭代開始使用名稱空間,您應該重新考慮您的代碼。 – Reactormonk 2012-07-15 11:57:57
Hi Tass,你可以擴展「數組中的匿名類」嗎?我相當積極,這不是解決我目前正在研究的問題的最好方法,但我認爲我應該知道如何做這樣的事情。 – comb 2012-07-15 17:47:26