Ruby: Как включить классы пространства имен в глобальное пространство имен в IRB

Почему-то я хочу использовать классы / модули пространства имен, так как они находятся в глобальном пространстве имен в IRB.

Например, у меня есть модуль MyCore и класс MyUser внутри него. Есть ли механизм или крючок для IRB, чтобы включить MyCore::MyUser таким образом, я могу назвать просто MyUser.new без префикса с MyCore?

4 ответа

Вы можете просто сделать

include MyCore

myUser = MyUser.new

С помощью include добавляет все константы в модуле к вашему текущему классу.

class WhereIWantToIncludeMyCore
  include MyCore

  def initialize
    user = MyUser.new
  end
end

Если вы хотите делать это везде, вы можете добавить его за пределы class, который будет включать его в Object,

Вы всегда можете сделать

MyUser = MyCore::MyUser

Если вы хотите получить все включенные модули / классы:

MyCore.constants.each do |const|
  Object.const_set(const, MyCore.const_get(const))
end

Вы могли бы сделать что-то вроде

MU = MyCore::MyUser

и использовать псевдоним, который вы определили для последующих вызовов.

Я исследую эту проблему, и я нашел этот разговор и сценарии.

но я думал, что это сокровище wrap_in_module делает лучшую практику

wrap_in_module

Надеюсь, поможет.

Другие вопросы по тегам