Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby:如何获取相对于self的父模块的名称?_Ruby - Fatal编程技术网

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

Ruby:如何获取相对于self的父模块的名称?,ruby,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 #

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

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
模块专用
类基址控制器
自我行动
放置Module.nesting.inspect#我希望这是相对于self的
结束
结束
结束
Foobar模块
类控制器<特殊::BaseController
行动做
#应该打印Foobar::Controller
结束
结束
结束

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

我认为问题在于Ruby尚未在您想要了解的时候完成模块和类的定义。关闭定义后,您可以创建它的实例并找到:

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

我认为问题在于Ruby尚未在您想要了解的时候完成模块和类的定义。关闭定义后,您可以创建它的实例并找到:

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

这比我想象的要容易。调用
self.to_s
将给出您的全名(包括模块)。因此,您可以抓住倒数第二个:

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

这比我想象的要容易。调用
self.to_s
将给出您的全名(包括模块)。因此,您可以抓住倒数第二个:

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

可能一个人也可以使用
name
而不是
to_s
可能一个人也可以使用
name
而不是
to_s