2016-07-10 5 views

답변

4

표준 문서에서 이러한 방법의 소스 코드에서 볼 수 있듯이 Kernel#autoload은 수신기를 클래스에 캐스팅 한 후에 Module#autoload으로 호출합니다.

하나는 가장 일반적인 접근 방식을 사용하고 클래스 수준에 autoload 호출

class C 
    autoload(:M, 'm') 
end 

Module#autoloadClass < Module 때문이라고합니다. 리시버가 이미이 경우에 Class '인스턴스이므로 명시 적 형변환이 필요하지 않습니다.

한편

, 하나는 메서드 본문 내에서 autoload를 호출 할 필요가 있습니다 수신기가 인스턴스가 후자의 경우

class C 
    def c 
    autoload(:M, 'm') 
    end 
end 

을하고는 Module 자손 않는 한, Kernel#autoload가 호출되는, 차례로이 인스턴스의 클래스를 가져 와서 호출을 Module#autoload에 전달합니다.