2013-02-23 3 views
3

최근 루비를 작성하기 시작했고 모듈이 어떻게 작동하는지 이해하는 동안 다음과 같은 문제가 계속 발생합니다.루비 모듈의 동작 이해

module ModuleA 
    def a_greet 
     'Hello from module A' 
    end 
end 


module ModuleB 
    def b_greet 
     'Hello from module B' 
    end 
end 


include ModuleA 
include ModuleB 

# WHY DOES THIS WORK !!!!! 
p ModuleA.b_greet 

나는 모듈의 기능을 Module.를 지정하지 않고 내가 이런 식으로 코드를 작성하지 않을 거라고 호출 할 수 있음을 얻을 수 있지만, 당신은 명시 적으로 ModuleA을 진술 할 때 방법은 ModuleB에서 포함 호출 할 수있는 이유를 이해할 수 없다 ?

답변

7

기다립니다 더있다 :

"Why does this work?".b_greet # => "Hello from module B" 

하는 당신은 최상위 객체 main에서 그 모듈을 포함하고 있습니다. 특수 객체입니다. 여기에 정의 된 모든 메소드가 모든 객체에서 사용할 수있게됩니다 (위의 행을 참조하십시오. Stringb_greet 메소드가 있습니다). ModuleA도 개체이므로 ModuleB을 포함하면 ModuleA 메서드를 가져옵니다. 이러한 모듈을 일반 클래스/객체에 포함 시키면이 "공유"동작을 얻지 못합니다.

+0

흥미 롭 .. 감사합니다. – RayViljoen