如果你有:
module A
class B
end
end
您可以通过 A.constants 找到 B 和类似的类。但是,在 Ruby 1.9.3 中,如果 B 在另一个模块中,则无法获取 B。在 Ruby 1.8.7 中您可以。
module A
module Aa
class B
end
end
end
如何从第一级 A 获得 B?我想要的输出是一个常量数组,其中包括 B 等所有类,但位于模块 A 内的任何位置。
class Module
def all_the_modules
[self] + constants.map {|const| const_get(const) }
.select {|const| const.is_a? Module }
.flat_map {|const| const.all_the_modules }
end
end
A.all_the_modules
# => [A, A::Aa, A::Aa::B]
如果您确实有循环命名空间,则此代码将会中断,又名A::Aa::B.const_set(:A, A)
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)