2010-06-02 5 views
7

저는 모듈을 루비의 네임 스페이스로 사용하고 있습니다. 어떻게 자동 로딩에 대해 갈 것인가? autoload :"App::ModuleA", 'app/module_a과 같은 것이 "반드시 상수 이름이어야한다"라는 오류가 발생하지 않습니까? 이 너무 중첩 수준 작동네임 스페이스/서브 모듈로 자동로드

App.autoload :ModuleA, "app/module_a" 

참고 :

답변

11

당신은 autoload에 기호 (귀하의 질문에 아마도 오타)를 통과하고, 같은 상수의 부모에 전화를해야합니다. 루비 App::ModuleA::Inner 발생하면

module App::ModuleA 
    autoload :Inner, "path/to/inner" 
end 

는, 먼저, ModuleA에 액세스하려고 시도를 자동 로딩에 의해 성공, 오직 그때는 지금 어디에가 자동로드에 알고 있기 때문에 또한 성공하는 Inner을 시도합니다 : app/module_a에 당신은 말한다.

+0

나는 그것을 이해합니다. 하지만 Constant ModuleA를 호출 할 때 초기화하고 싶지는 않습니다. 누군가가'include App :: ModuleA'라고 말할 때 호출하고 싶습니다. –

+1

사실,'autoload'뿐만 아니라'App.autoload'도 호출하려고합니다. . 그것을 밖으로 시도, 그것은 당신이 원하는대로 작동합니다. –

+0

aaaah ... 알겠습니다. 고마워. :) –