Ruby:如何获取父模块相对于自身的名称



我正在尝试获取子类的父模块的名称:

module Special
  class BaseController
    def self.action
      puts Module.nesting.inspect # i want this to be relative to self
    end
  end
end
module Foobar
  class Controller < Special::BaseController
    action do
      # should print Foobar::Controller
    end
  end
end

如何获取子类的父模块而不是基类?

这最终比我想象的要容易。调用self.to_s将为您提供全名(包括模块)。所以你可以抓住倒数第二个:

class_name = self.to_s.split('::')[-2]
我认为

问题是 Ruby 还没有在你想知道的时候完成模块和类的定义。关闭定义后,您可以创建它的实例并找出:

irb(main):017:0> Foobar::Controller.new.class
Foobar::Controller < Special::BaseController

然后是执行字符串拆分的情况:

irb(main):033:0> Foobar::Controller.new.class.to_s.split('::')
[
    [0] "Foobar",
    [1] "Controller"
]

相关内容

最新更新