我正在研究捕获基类上定义的每个方法,查找它定义的文件,然后根据它做一些逻辑.
我目前有:
# 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.