2011-08-12 1 views
0

정의 된 기본 클래스의 메서드를 호출하는 파생 된 Ruby 클래스를 작성하려면 어떻게해야합니까?

이 클래스가 있다고 가정 해 봅시다 :

class ComponentLibrary 
    def self.register(klass); ...; end 
end 

또한이 기본 클래스가 있다고 가정합니다.

class BaseComponent 
    ComponentLibrary.register self 
end 

ComponentLibrary로 등록 할 최소 클래스로 파생 클래스를 작성하는 방법은 무엇입니까? 그들이 정의되면? (다른 말로하면, 나는 어디에서나 ComponentLibrary.register self을 작성하는 것을 선호하지 않을 것입니다.)

분명히 말하자면, 다른 클래스를 작성하는 것과 같은 것입니다 :

class RedComponent < BaseComponent 
    # ... 
end 

class BlueComponent < BaseComponent 
    # ... 
end 

그러나 나는 원하지 않습니다. 각각에 대해 ComponentLibrary.register self를 작성하십시오.

답변

3
class BaseComponent 
    def self.inherited(base) 
    ComponentLibrary.register(base) 
    end 
end 

class RedComponent < BaseComponent 
end 

이 줄에있는 것이 사용자에게 도움이 될 수 있습니다.

편집 : #inherited로 변경되었습니다.

+0

이 모듈은 BaseComponent가 처음 정의 된 경우에만 한 번만 포함되기 때문에 작동하지 않습니다. 새로운 클래스를 만들 자마자 (예를 들어'class DerivedComponent

+0

완벽! 감사. –

관련 문제