如何将模块名称空间添加到ruby类/模块?

时间:2018-06-05 04:21:41

标签: ruby namespaces

我想在我定义的类/模块中添加命名空间,但我不想输入长格式

class A::B::C::D::<ClassName>

OR

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

换句话说,我只想定义类class ClassName,然后需要一种方法将此类发送到名称空间A::B::C::D

下。

这样我就可以像这样编写一堆代码:

# File Name: a/b/c/d/some_class.rb
class SomeClass
  include SomeModule
  # class content
end

# File Name: a/b/c/d/some_module.rb
module SomeModule
  # module content
end

因为我的代码库中有太多的模块,所以我不想每次都输入前缀命名空间。但我想在最后说出这样的话:

SomeClass.add_to_namespace(A::B::C::D)
SomeModule.add_to_namespace(A::B::C::D)

重要:这也应该影响类命名空间查找,以便Ruby / Rails不会抱怨:

expected a/b/c/d/some_class.rb to define SomeClass

问题:命名空间中include - 我的类会产生相同的效果吗?

module A::B::C::D
  include ClassName
end

1 个答案:

答案 0 :(得分:2)

看起来你问的问题有点多方面,但是如果你只想在另一个文件中使用该类而不必每次都输入命名空间,那么一个简单的解决方案就是重新定义它在您想要在

中使用它的文件中
ClassName = A::B::C::D::ClassName

然后你可以做ClassName.method就好了