Ruby: просмотр (пере) определение метода во время выполнения - PullRequest
1 голос
/ 22 марта 2010

Я ищу способ (трюк с библиотекой или метапрограммированием), чтобы подключиться к определению метода, чтобы я мог расширять определенные классы и ловить их метод (пере) определение "события".

Ответы [ 3 ]

3 голосов
/ 22 марта 2010

Существует обратный вызов 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
1 голос
/ 22 марта 2010

Переопределить method_added. Имейте в виду, однако, что если вы динамически изменяете методы в method_added, то они также вызовут method_added, поэтому вам нужно иметь некоторый способ узнать, какие методы вам нужны избежать бесконечной рекурсии.

1 голос
/ 22 марта 2010

Вы пытались переопределить "define_method"? По крайней мере, вы могли бы поймать некоторые определения метода "времени выполнения"?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...