如何获取任意ruby类的完整文件路径?

例如:

class Base

    def self.inherited(subclass)
        puts "New subclass: #{subclass}"
        path_of_subclass = ????
    end
end

然后在另一个文件/类中,它扩展了Base.

class X < Base
          ....
end

我如何从超类中获取该子类的rb文件的路径.

最佳答案 使用
caller方法并解析它的文件名.始终从定义类的文件中调用inherited.

考虑以下:

a.rb:

require 'pp'
class Base
  def self.inherited(subclass)
    pp caller
  end
end

b.rb:

require './a.rb'

class Derived < Base
end

我们运行这个:

$ruby b.rb
["b.rb:3"]
点赞