Я ищу способ (трюк с библиотекой или метапрограммированием), чтобы подключиться к определению метода, чтобы я мог расширять определенные классы и ловить их метод (пере) определение "события".
Существует обратный вызов method_added (к сожалению, документации http://www.ruby -doc.org / core / classes / Module.html # M001662 нет.) Вы используете его следующим образом:
class Foo # define the callback... def self.method_added(method_name) puts "I now have a method called #{method_name}" end # the callback is called on normal method definitions def foo # "I now have a method called foo" will be printed end # the callback is called on method definitions using define_method define_method :bar do # "I now have a method called bar" will be printed end # the callback is called on method definitions using alias and the likes alias :baz :foo # "I now have a method called baz" will be printed end
Переопределить method_added. Имейте в виду, однако, что если вы динамически изменяете методы в method_added, то они также вызовут method_added, поэтому вам нужно иметь некоторый способ узнать, какие методы вам нужны избежать бесконечной рекурсии.
method_added
Вы пытались переопределить "define_method"? По крайней мере, вы могли бы поймать некоторые определения метода "времени выполнения"?