从深层嵌套模块访问常量

时间:2014-03-04 16:58:50

标签: ruby namespaces

我有以下模块结构:

-->Analytics (module)
    --> Reporting
        --> Metrics
            --> Computed

-->Content (class) 

Computed内,我有一些模块常量FOOContent中有许多方法可以深入Computed并访问FOO。目前,这样做的方式是:

#content.rb
...
def do_something
    ...
    foo = Analytics::Reporting::Metrics::Computed::FOO
    ...
end

访问深层嵌套模块常量或变量的最佳实践是什么?我不能以任何不同方式命名Content。有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

进入Content的班级主体后,请执行以下操作:

include Analytics::Reporting::Metrics::Computed

然后,您将无法使用显式命名空间访问FOO

module A
  module B
    module C
      module D
        FOO = "This is FOO from A::B::C::D"
      end
    end
  end
end

class E
  include A::B::C::D
  p FOO
end
# => "This is FOO from A::B::C::D"

答案 1 :(得分:1)

虽然这是我的观点,但我会考虑在配置级别存储它,可能使用figaro或类似的方式,特别是如果它可以被许多不同的类访问。