例如:
class Base
def self.inherited(subclass)
puts "New subclass: #{subclass}"
path_of_subclass = ????
end
end
然后在另一个文件/类中,它扩展了Base。
class X < Base
....
end
如何从超类中获取该子类的rb文件的路径。
答案 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)
编辑:对不起,我刚刚意识到如果没有在同一个文件中定义原始方式将不起作用。