我有许多名称空间,但我需要获取顶级名称空间的名称。
A::B::C
因此,如果我调用.class,我会得到A::B::C,但我需要它只返回顶级名称空间A。
有什么方法可以解决这个问题吗?
发布于 2019-09-22 05:44:49
假设您有以下嵌套模块:
module A
module B
module C
end
end
end如果你得到了这个模块
m = A::B::C 那么顶层模块等于:
top = Module.const_get(m.to_s[/.+?(?=::)/])
#=> A
top.is_a? Module
#=> true参见Module#const_get。正则表达式是这样写的:“延迟匹配后面跟两个冒号的一个或多个字符(?)”,(?=::)是一个正向先行。
发布于 2019-09-23 16:57:54
您可以使用parents方法来获取所有父模块的数组。
module A
module B
module C
end
end
end
my_namespace = A::B::C
my_namespace.parents # => [A::B, A, Object]
my_namespace.parents.last(2).first # => Ahttps://stackoverflow.com/questions/58036250
复制相似问题