2014-11-06 4 views
2

베스트 코드 설명 .... 루비 목록 조상

>> String.ancestors 
=> [String, Comparable, Object, Kernel, BasicObject] 
>> Comparable.ancestors 
=> [Comparable] 
>> Object.ancestors 
=> [Object, Kernel, BasicObject] 
>> Kernel.ancestors 
=> [Kernel] 
>> BasicObject.ancestors 
=> [BasicObject] 

그래서 나는과 대등 커널이나 mixin은 ... 상속 체인 문자열 < 객체 < BasicObject 의심 ...

인가가 상속 보여줄 수있는 기능이 '는 foobar'숨겨진 메타 클래스의 석재로 만들어진

>> String.foobar 
=> [Object, BasicObject] 

그리고 가능하면 싱글 톤 메소드도 링에 포함시켜야합니까?

답변

6
String.ancestors.grep(Class) 

......................

+2

이 어떻게 [기본적으로' Class.superclass'] (http://ruby-doc.org/core-2.1.4/Class.html#method-i-superclass)는 조상을 가로 지르고 각 조상의 유형을 검사합니다. – Stefan

+1

예. YARV 소스 코드 내에서 조상 클래스에서 건너 뛴 클래스는 "가상 클래스"라고하며, 이들은 싱글 톤 클래스와 "포함 클래스"(믹스 인을 포함 할 때 생성되고 상속 체인에 주입되는 클래스)입니다. –

4

당신은 할 수 있습니다 :

class Class 
    def foobar 
    ancestors - included_modules - [self] 
    end 
end 
+3

'foobar'는'Class'의 메소드 여야합니다 (모듈은 모듈이 아닌 조상을 가질 수 없습니다) – Stefan