我试图找出
Ruby中扩展模块的位置.现在我唯一能想到的就是使用来电并选择合适的线路.是否有一种更惯用,更脆弱的方式来处理它?
module ClassMethods
def self.extended(base)
p caller[2]
end
end
最佳答案 我个人会这样做(基于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
假设您具有基类的内部知识,您可以尝试这样的事情:
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:我知道这是一个巨大的黑客,并不是很好,我很想知道是否有更好的方法来做这样的事情.