我正在研究捕获基类上定义的每个方法,查找它定义的文件,然后根据它做一些逻辑。
我目前有:
# 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
但不要以为我必须实例化任何东西以使其发挥作用。
有什么想法吗?
答案 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