は、私はこのクラスを持っていると言う:Rubyで切り離されたメソッドをきれいに "再接続"するにはどうすればいいですか?
class Foo
def destroy_target(target)
Missile.launch(target)
end
end
私はテスト目的のために、たとえば、Foo
の破壊力中性一時的にしたいので、私はこれを行う:
backup = Foo.instance_method(:destroy_target)
class Foo
def destroy_target(target)
Pillow.launch(target)
end
end
ここに私の質問があります:最初の方法でオーバーライドされなかったかのように、元のメソッドをFoo
に「再接続」するにはどうすればよいですか?
私はこれを行うことができます実現:
class Foo
def destroy_target(target)
backup.bind(self).call(target)
end
end
しかし、私は今、本来の機能をラップしていて、明らかに、これは、最適ではありません。オーバーヘッドを追加することなく、メソッドを無期限に切り離して再接続できるようにしたい。
は異なる道を尋ねました。 DetachedMethod
を「適切に」クラスにアタッチするにはどうすればよいですか。つまり、切り離されたメソッドを呼び出す新しいメソッドを定義することはありません。
注:クラスの機能を一時的に変更する別の方法には興味がありません。私は具体的には、メソッドを別のメソッドに置き換え、元のメソッドをきれいに復元する方法を知りたいと思っています。
Foo.instance_exec {
define_method(:destroy_target, backup)
}
しかし、私は、これは副作用の自由であるならば、完全にはわからない:
'backup = Foo.instance_method(:destroy_target)' 'なし' –
特定の 'Foo'インスタンスまたはクラス全体、つまりすべての' Foo'に対してメソッドを置き換えますか? – Stefan