Скажем, у меня есть этот класс:Как я могу «повторно подключить» отсоединенный метод в 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
к классу «правильно», то есть без определения нового метода, который вызывает отсоединенный.
Примечание: Меня не интересуют альтернативные способы временного изменения функциональности класса. Я специально хочу знать, как заменить метод другим методом, а затем восстановить исходный метод.
'backup = Foo.instance_method (: destroy_target)' без 's' –
Вы хотите заменить метод для конкретного экземпляра' Foo' или класса, т. Е. Для всех 'Foo'? – Stefan