拥有Class时查找方法的source_location

时间:2012-04-03 14:30:43

标签: ruby metaprogramming

我正在研究捕获基类上定义的每个方法,查找它定义的文件,然后根据它做一些逻辑。

我目前有:

  # Defined in some file
  class Subclass < Base
    def foo
    end
  end


  class Base
    self.method_added(method)
      # self is a given subclass (Subclass)

      # This doesn't work. :(
      self.method(method).source_location
    end
  end

我希望能够找到该方法的源位置。

我可以这样做:

self.new.method(source).source_location

但不要以为我必须实例化任何东西以使其发挥作用。

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

您可以使用方法Module#instance_method来获取班级的实例方法:

instance_method(method).source_location  # `self` is unnecessary, it is added implicitly
# => ["/home/alex/Projects/test/test.rb", 23]
  

instance_method(symbol)→unbound_method

     

返回表示mod。

中给定实例方法的UnboundMethod