Как добавить пространство имен модуля в класс / модуль ruby? - PullRequest
0 голосов
/ 05 июня 2018

Я хочу добавить пространство имен к определенному классу / модулю, но не хочу вводить длинный формат

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 - мой класс в пространстве имен иметь такой же эффект?

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

1 Ответ

0 голосов
/ 05 июня 2018

Кажется, что то, что вы спрашиваете, является многогранным, но если вы просто хотите использовать класс в другом файле без необходимости каждый раз печатать пространство имен, тогда простым решением будет просто переопределить его вфайл, который вы хотите использовать в

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

Тогда вы можете просто сделать ClassName.method просто отлично

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...