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

时间:2010-05-09 01:27:14

标签: ruby

例如:

class Base

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

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

class X < Base
          ....
end

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

2 个答案:

答案 0 :(得分:4)

使用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"]

答案 1 :(得分:-2)

File.expand_path(subclass.to_s)

编辑:对不起,我刚刚意识到如果没有在同一个文件中定义原始方式将不起作用。