假设我可以构造一个匹配现有类的字符串,我该如何调用它?如何在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