2012-07-19 1 views
0

제 문제는 Struct.new를 확장하는 많은 클래스가 있다는 것입니다. 그리고 이제 모든 클래스에 공통 클래스 메서드를 추가해야합니다. Struct가 '정상'수퍼 클래스 인 경우 클래스 메소드를 정의 할 수 있으며 모든 서브 클래스에도 해당 메소드가 있습니다.클래스 메소드를 갖기 위해 Struct.new에 의해 생성 된 모든 클래스를 어떻게 만들 수 있습니까?

감안할 때,이 동작을 어떻게 복제합니까? 예를 들어 ,

class Foo < Struct.new(:foo); end 
Foo.respond_to?(:perform) #=> true 
class Bar < Struct.new(:bar); end 
Bar.respond_to?(:perform) #=> true 
+0

모듈에 정의하고 하위 클래스에 포함하십시오. –

+0

이것은 처음 접근 이었지만 오류가 발생하기 쉽습니다. –

답변

2

왜 구조체에 대한 방법을 정의 할 수 없습니다?

def Struct.perform 
end 

class Foo < Struct.new(:foo); end 
Foo.respond_to?(:perform) #=> true 
class Bar < Struct.new(:bar); end 
Bar.respond_to?(:perform) #=> true 
+0

간단합니다. 감사! 그러나 이것은''class Struct와 어떻게 다른가? def perform; 종료; 끝''? –

+1

그게 인스턴스 메서드를 추가 할 것입니다 –

+0

죄송합니다, 나는'''클래스 구조를 의미; def self.perform; 종료; end''' –

관련 문제