ruby - 有没有办法在每个方法定义后添加代码来运行

时间:2011-10-07 08:31:11

标签: ruby metaprogramming

我知道def是一个关键字,无法覆盖。

但是有一种方法可以在方法向类注册时调用方法(传入正在创建的方法的名称吗?)

3 个答案:

答案 0 :(得分:7)

这就是Module#method_added钩子方法的用途:

module Foo
  def self.method_added(meth)
    p meth
  end

  def bar; end
end

# :bar

答案 1 :(得分:3)

使用该钩子创建mixin:

module Foo
  def method_added(method_name)
    puts "method #{method_name} added"
  end
end

class Bar
  extend Foo

  def some_method
  end
end

请注意,method_added是类方法(严格来说是Class类实例实例方法sic!),因为它是在Module类中定义的。所以我们必须用extend添加它,以便它转到Bar元类。

答案 2 :(得分:0)

如果我理解你的问题,

  

class_instance.send(METHOD_NAME)

应该这样做