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

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

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


person Roman Trofimov    schedule 07.05.2014    source источник
comment
Вы всегда можете сделать MyUser = MyCore::MyUser   -  person BroiSatse    schedule 07.05.2014


Ответы (4)


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

include MyCore

myUser = MyUser.new

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

class WhereIWantToIncludeMyCore
  include MyCore

  def initialize
    user = MyUser.new
  end
end

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

person Uri Agassi    schedule 07.05.2014
comment
Вы можете сделать это только в том случае, если MyCore является модулем - person BroiSatse; 07.05.2014
comment
ОП: Например, у меня есть модуль MyCore... - person Uri Agassi; 07.05.2014

Вы можете сделать что-то вроде

MU = MyCore::MyUser

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

person Kostas Rousis    schedule 07.05.2014

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

MyUser = MyCore::MyUser

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

MyCore.constants.each do |const|
  Object.const_set(const, MyCore.const_get(const))
end
person BroiSatse    schedule 07.05.2014
comment
О, повторение всех констант, отлично! - person Roman Trofimov; 08.05.2014

Я изучил эту проблему и нашел это разговор и скрипты

но я думал, что этот драгоценный камень wrap_in_module лучше всего подходит

wrap_in_module

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

person Spec    schedule 26.10.2016