2011-07-04 6 views
3

특정 조건이 충족 될 경우 라이브러리 내의 함수 동작을 재정의하고, 그렇지 않으면 원래 함수를 실행합니다. 예 : 나는 그것을 확장하지 함수를 재정의하고 있습니다 때문에 super이 인스턴스에서 작동 것이라고 생각하지 않는다메소드 재정의

class LibraryToExtend 
    def FunctionToExtend(argument) 
    if argument == something 
     do_something_new 
    else 
     do_what_the_function_did_originally 
    end 
    end 
end 

.

+0

을을 downvoted 사람이다? –

+0

이것은 [원숭이가 메서드를 패치 할 때, 새로운 구현에서 재정의 된 메서드를 호출 할 수 있습니까?] (http://StackOverflow.Com/q/4470108/#4471202)와 중복됩니다. –

+0

그건 downvote에 대한 이유가 없어요, 그냥 dup으로 닫습니다 (비록 내가 '마일이 먼 대답'에 대한 대답을 선호하지만 그 질문이 있습니다) –

답변

3

실제로 super 실 거예요. 어떻게 든 이전 방법에 대한 참조를 유지해야하며 alias을 작성하면됩니다. 보조 노트로

class LibraryToExtend 
    alias :FunctionToExtend :original_function 
    def FunctionToExtend(argument) 
    if argument == something 
     do_something_new 
    else 
     original_function() 
    end 
    end 
end 

는 규칙은 루비 방법 lowecase 및 밑줄 (_)없는 낙타 표기법에 (하지만 그냥 나를 창녀 인이다)이

+0

그게 정확히 내가 찾고있는 것입니다! 전에 Ruby에서 별칭에 대해 들어 보지 못했습니다. 고맙습니다. –

+0

문제는 없지만 실제로이 질문이 정말 좋은 점이라고 덧붙이고 싶습니다. 추가 된 컨텍스트 추가 –

관련 문제