2011-09-23 65 views
1

我使用奠定了它的庫了這樣一個圖書館:在Ruby中,我如何反思模塊中包含的類?

module Lib 
    class A; end 
    class B; end 
    ... 
end 

我知道我可以在對象上使用send到「呼叫」僅在運行時已知的方法(例如,foo.send(:bar, :baz_param=>42)。我如何在課堂上做到這一點?

換句話說,我懷疑有寫東西像這樣的方式:

label = :Klass 
MyModule.some_method(label).new 

執行,實際上爲:

MyModule::Klass.new 

我說得對不對?

回答

2

只要我張貼的問題,我靈機一動:

const_get

類名稱被視爲常數,並且該方法對所有的模塊中定義,也因此查找範圍可以是僅限於該模塊。記得剛拿到資本權:

MyModule.const_get(:Klass).new # => #<Klass:> #CORRECT 

MyModule.const_get(:klass).new # => NameError: wrong constant name 
+1

'MyModule.const_get('klass'.capitalize.to_sym)'也適用,如果你不是在你輸入的資本有信心就好了。 – pjmorse

相關問題