在模块声明之外嵌套模块

时间:2013-09-10 08:50:42

标签: ruby module nested activesupport

我想要A::B::C.nesting #=> [A::B::C, A::B, A]之类的东西但是在这些模块的声明之外......我怎么能得到这个? ActiveSupport已启用。感谢。

1 个答案:

答案 0 :(得分:2)

class Module
  def nesting
    a = inspect.split("::")
    a.length.downto(1).to_a.map{|l| const_get(a[0, l].join("::"))}
  end
end

class Module
  def nesting
    s = inspect
    s.count(":")./(2).downto(0).to_a.map{|l| const_get(s[/[^:]+(?:::[^:]+){#{l}}/])}
  end
end