例如:
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"]