2011-09-23 3 views
1

:루비에서는 모듈에 포함 된 클래스를 어떻게 반영 할 수 있습니까? 나는이 같은 자사의 라이브러리를 낳는 라이브러리를 사용하고 있습니다

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

관련 문제