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