2013-03-21 2 views
0

루비에서 메서드를 삭제하는 것이 가장 좋습니다.빈 메서드를 사용하는 재정의 메서드

e.e. 내가 좋아하는 키워드가 있는지 알고 싶습니다

class A 
    def XX 
    [..do something..] 
    end 
end 

class B < A 
    def XX 
    # Do Nothing 
    end 
end 

...

class B < A 
    void_method :XX 
end 

: 나는 아무것도 가진 메소드를 오버라이드 (override) 할 경우, 서브 클래스에서,이 아닌 다른 문법이있다. 코드 유지 관리가 더 명확하기 때문입니다.

답변

4

이 아니며, 실제로 쉽게

class A 
    def self.void_method name 
    define_method(name) {} 
    end 
end 

를 이러한 방법을 추가 할 수 그러나

def XX; end 

보다 더 많은 키 입력 것 또는 분명히 당신이 경우 객체하려면이 옵션을 추가 할 수 있습니다 더 많은 장소에서 사용하게 될 것입니다.

1

귀하의 질문에 당신이 원하는 것이 분명하지 않습니다. 당신이 어떤 방법 오류를 반환하지하려면 다음을 수행하십시오

class B < A 
    undef_method :XX 
end 

당신이 그것을 nil을 반환하려면 다음을 수행하십시오

class B < A 
    def XX *args, &pr; end 
end 

당신이 수신기를 반환 할 경우, 이것을하십시오 :

class B < A 
    def XX *args, &pr; self end 
end