使嵌套模块在全球范围内可用

时间:2018-08-14 19:59:35

标签: ruby

鉴于我具有以下数据结构:

module A
  module B
    module C
      class D
      end
    end
  end
end

我想像这样在客户端代码中访问它:

C::D 

而不是

A::B::C::D

一种解决方案是像这样在模块A中定义一个方法:

module A
  def self.get_d
    B::C::D
  end
end

A.get_d

但是事实是C :: D在系统中已经存在的许多地方定义了。所以我需要向后兼容。我该如何解决这种情况?

1 个答案:

答案 0 :(得分:0)

没有“嵌套模块”之类的东西。它只是分配给命名空间常量的模块。如果要分配给其他常量...只需将其分配给其他常量:

C::D = A::B::C::D

注意:这假设当前名称空间中存在一个名为C的常量,并且它引用一个模块或类。但是,该假设已经存在于您的问题中。