微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby – 在拥有Class时查找方法的source_location

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

我目前有:

# 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

但是,不要认为我应该实例化任何东西以使其工作.

有任何想法吗?

解决方法

您可以使用方法 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

Returns an UnboundMethod representing the given instance method in mod.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐