Ruby:扩展模块的地方

我试图找出
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:我知道这是一个巨大的黑客,并不是很好,我很想知道是否有更好的方法来做这样的事情.

点赞