Получить Верхний уровень Пространство имен Рубин - PullRequest
2 голосов
/ 21 сентября 2019

У меня есть номер пространства имен, но мне нужно получить имя пространства имен верхнего уровня.

A :: B :: C

Итак, если я вызываю .classЯ получаю A :: B :: C, но мне нужно, чтобы он возвращал только верхнее пространство имен A.

Есть ли способ для этого?

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019

Вы можете использовать метод parents для получения массива всех родительских модулей.

module A
  module B
    module C
    end
  end
end

my_namespace = A::B::C
my_namespace.parents  # => [A::B, A, Object]
my_namespace.parents.last(2).first  # => A
0 голосов
/ 22 сентября 2019

Предположим, у вас есть следующие вложенные модули:

module A
  module B
    module C
    end
  end
end

Если вам дан модуль

m = A::B::C 

, тогда модуль верхнего уровня равен:

top = Module.const_get(m.to_s[/.+?(?=::)/])
  #=> A 
top.is_a? Module
  #=> true

См. Модуль # const_get .Регулярное выражение гласит: «лениво соответствовать одному или нескольким символам (?), за которыми следуют два двоеточия», (?=::) означает позитивный прогноз .

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