2013-03-18 1 views
5

하자의 오픈 클래스 Module하고 여기에 메소드를 추가 :이 작업을 수행하여이 메소드를 호출 할 수 있습니다클래스, 모듈, 자신의 eigenclasses, 및 방법 조회

class Module 
    def foo 
    puts "phew" 
    end 
end 

,

Class.foo 

이해할 수있다 Class의 클래스가 Class이고 그 슈퍼 클래스가 Module이기 때문에 따라서 Module에 정의 된 인스턴스 메소드를 호출 할 수 있습니다.

relation between classes and modules

이제 방법은 아래 barModule의 eigenclass에 정의됩니다

class Module 
    def self.bar 
    puts "bar" 
    end 
end 

하지만 지금

Class.bar 

도 작동합니다.

누군가 ClassModule의 고유 클래스에서 메소드에 액세스하는 방법을 설명 할 수 있습니까?


나는 지금 생각합니다. 메소드 검색은 이전에 설명했던 방식대로 작동하지 않습니다. 내가 Class.foo을 할 때, 그 방법은 Class의 eigenclass에서 찾은 다음, 수퍼 클래스 인 Module의 고유 클래스 BasicObject의 eigenclass까지 (그것이 자신의 꼬리를 먹는 뱀처럼) 자신을 켠다. 방법에 대한 Class (ClassBasicObject의 고유 클래스의 수퍼 클래스이므로) 수퍼 클래스 Module으로 이동하여 메서드를 찾습니다.

마찬가지로, Class.bar 일 때 Class의 고유 클래스에서 메소드를 검색 한 다음 Module의 고유 클래스에서 메소드를 검색합니다.

내가

class Class 
    def check 
    puts "class instance method" 
    end 
end 

class Module 
    def self.check  
    puts "modules eigenclass method"  
    end  
    def check  
    puts "module instance method" 
    end  
end 

추측 WOT을 수행 할 때 내가 할 때 출력 :

Class.check 

이 내 현재의 이해입니다 : current understanding

+0

관련 토론 유용한 정보 : https : // stackoverflow.com/questions/13269271/why-a-modules-singleton-method-is-visible-in-downstream-eigenclasses- 여기서 –

답변

0

저는 최근에 새로운 Ruby 2.0 동작을 포함하여 꽤 extensive tutorial이라고 썼습니다.

참고 : Ruby에서 사용되는 용어는 eigenclass이 아니라 singleton_class입니다.

+0

그 링크는 죽었습니다. –

1

Eigenclasses가 this blog post by Andrea Singh에 관련된 경우 Ruby의 메소드 검색 동작에 대한 포괄적 인 개요가 있습니다. 특히 맨 끝에있는 "Eigenclasses and Class Inheritance"섹션에는 여러분의 질문을 다루는 유용한 룩업 다이어그램이 있습니다.

+0

현재는 Ruby 2.2부터입니까? –

관련 문제