2013-12-21 3 views
0

내부 클래스가 적고 모듈 수가 적은 메서드를 정의했습니다. 클래스 중 하나에서 모듈에 정의 된 메서드를 호출하려고하는데 (공통 모듈 내부에서) 액세스 오류가 발생합니다. 내가 할Ruby의 조상 체인에서 메서드 액세스 문제가 무엇입니까

module Top 
class NestedClass 
    #some code 
    NestedModule::method_name 
end 

module NestedModule 
    def method_name 
    #some code 
    end 
end 
end 

그리고 오류 : 다음은 전체 hierachy입니다 정의되지 않은 메서드 'METHOD_NAME'최고 :: NestedModule에 대한 : 모듈

답변

0

쓰기 그것과 같은 :

module Top 
    module NestedModule 
    def self.method_name 
     #some code 
    end 
    end 
    class NestedClass 
    #some code 
    NestedModule::method_name 
    end 
end 

에서 귀하의 경우는 을 정의하기 전에 NestedModule::method_name을 수행했습니다.

+0

Top 모듈 외부에서 정의하고 실제로 필요로하는 클래스 (NestedClass)에 포함하면 어떨까요? – user2128702

+0

@ user2128702 나는 당신을 얻지 못했다 –

+0

나는 길을 시도했지만 정확히 같은 NoMethodError를 얻는다. 나는 이유를 정말로 모른다. – user2128702

0

선언되지 않은 메서드와 인스턴스 모듈 메서드를 직접 호출 할 수 없습니다. 어쩌면이 당신을 위해 일을 취소합니다

module Top 
    module NestedModule 
    def self.module_method 
     1 
    end 

    def instance_method 
     2 
    end 
    end 

    class NestedClass 
    NestedModule.module_method # => 1 
    NestedModule.instance_method(:instance_method) # => #<UnboundMethod: Top::NestedModule#instance_method> 

    extend NestedModule 
    instance_method # => 2 

    include NestedModule 
    new.instance_method # => 2 
    end 
end 

을 그리고 "NestedModule :: module_method"하지만 여기 일하는 것이, 컨벤션 클래스/모듈 메서드를 호출 할 때 도트를 사용하는 것입니다, 더블 콜론은 중첩 된 모듈에 액세스 할 때/수업.