2011-01-17 2 views
1

클래스 D에 인스턴스 메서드 및 클래스 메서드로 구성된 몇 가지 공통 기능을 추가하고 싶습니다. 아래 에서처럼이 작업을 시도했지만 작동하지 않았습니다. 이것을 달성하는 올바른 방법은 무엇입니까?Ruby에서 인스턴스 및 클래스 메서드를 래핑하는 방법은 무엇입니까?

module A 
    def foo 
    puts "foo!" 
    end 
end 

module B 
    def wow 
    puts "wow!" 
    end 
end 

module C 
    include A # instance methods 
    extend B # class methods 
end 

class D 
    include C 
end 

D.new.foo 
D.wow 

답변

6

당신은 당신이 원하는 일을 할 수 있도록 다음과 같이 C를 정의해야합니다 :

module C 
    include A 

    def self.included(base) 
    base.extend B #"base" here is "D" 
    end 

end 
+0

감사합니다! 여기서 '자기'의 의미는 무엇입니까? 내가 생략한다면? –

+0

자체는 "모듈 메소드"를 포함합니다. "클래스 메소드"와 유사합니다. 제거하면 작동하지 않습니다. –

+0

@Misha 생략하면 생략됩니다. 'def self.xxx'는 인스턴스에 의해 상속 될 메소드가 아니라 클래스/모듈 자체에 대한 메소드를 정의합니다. – Phrogz

관련 문제