Ruby:如何获取父模块相对于self的名称?

时间:2012-08-06 21:37:13

标签: 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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

我认为问题在于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"
]