【问题标题】:How to add module namespace to a ruby class/module?如何将模块命名空间添加到 ruby​​ 类/模块?
【发布时间】:2018-06-05 04:21:41
【问题描述】:

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

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

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-ing 我的类在命名空间中会有同样的效果吗?

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

【问题讨论】:

  • 为什么不用sed 写一个quick'n'dirty shell 脚本?
  • “我不想输入长格式”——你的意思是在创建一个新的类/模块时?
  • @Stefan yes 在创建类/模块时
  • 这听起来像是您的编辑器/IDE 应该帮助您解决的问题。

标签: ruby namespaces


【解决方案1】:

您的要求似乎是多方面的,但是如果您只想在另一个文件中使用该类而不必每次都输入命名空间,那么一个简单的解决方案就是在你想在其中使用它的文件

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

那你就可以ClassName.method就好了

【讨论】:

    猜你喜欢
    • 2018-10-31
    • 2011-12-03
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-22
    • 2013-09-06
    相关资源
    最近更新 更多