2011-07-04 3 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

これは[Monkeyがメソッドにパッチを当てるとき、新しい実装からオーバーライドされたメソッドを呼び出せるかどうか](http://StackOverflow.Com/q/4470108/#44712​​02)の複製です。 –

+0

これは、downvoteの理由はありません、ちょうどdupとして閉じます(私は私の答えが 'マイルの長い'答えに好むが) –

答えて

3

実際には効きません。あなたは何とか古いメソッドへの参照を保持する必要があり、これを行うには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

問題はありませんが、実際にはこれは本当に良い質問であると付け加えたいと思います。コンテキストを追加しました –