我试图找出Ruby中扩展模块的位置。现在,我唯一能够提出的就是使用caller
并挑出适当的行。是否有更惯用且更不易处理的方式?
module ClassMethods
def self.extended(base)
p caller[2]
end
end
答案 0 :(得分:2)
我个人会这样做(基于OP的评论):
module ClassMethods
end
class Object
def extend_with_path(mod, filename)
p filename
self.extend(mod)
end
end
class Foo
extend_with_path ClassMethods, __FILE__
end
假设您具有base
课程的内部知识,您可以尝试这样的事情:
module ClassMethods
def self.extended(base)
p base.new.method(:superfluous_method).source_location
end
end
class Foo
def superfluous_method
end
extend ClassMethods
end
PS:我知道这是一个巨大的黑客,并不是很好,我很想知道是否有更好的方法来做这样的事情。