获取已定义方法的名称

时间:2012-10-07 09:42:13

标签: ruby metaprogramming

我知道我可以使用set_trace_func来捕捉方法定义的时刻。

set_trace_func ->event, file, line, method, binding, klass{
  if event == "c-call" and method == :method_added
    # The moment of method definition
  end
}
  1. 是否有可能捕获此时正在定义的方法的名称?我知道该课程可以被eval("self", binding)捕获。我可以在上面显示的块中放入什么代码来捕获方法名称?
  2. 是否还可以获取定义方法的参数格式(必需参数,其余参数以及它们在源中的名称)?

2 个答案:

答案 0 :(得分:1)

set_trace_func之外,您可以使用Module.method_added

class Test
  def self.method_added(method_name)
    puts "#{method_name} added to #{self}"
  end

  def foo
    "foo"
  end
end

$ ruby test.rb
# => foo added to Test

答案 1 :(得分:0)

查看文档。

Kernel.set_trace_func proc允许您捕获id参数。这大部分时间都是函数名称。

但是,从您的示例中学习,您还可以使用eval("__method__", binding)获取当前运行的方法...但我认为这只会获得您在类中定义的方法。