2012-10-07 95 views
4

我知道我可以通过使用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. 是否可以进一步获取正在定义的方法的参数的格式(所需参数,参数的其余部分以及它们在源中的名称)?
  3. set_trace_func

回答

1

,你可以使用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 
+0

类似:http://stackoverflow.com/questions/4799760/understanding-method-added-for-class-methods – pje

0

检查文档。

Kernel.set_trace_func proc允许您捕获id参数。这是大多数时候的功能名称。

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