У меня есть метод, который должен иметь возможность доступа к иерархии вложений определения модуля. Предположим, у меня есть это определение:
module A
module B
module C
end
end
end
Я пытаюсь написать метод таким образом, чтобы, если в метод передана ссылка на C
, он мог вернуть результат Module.nesting
, как если бы он был вызван внутри определения. Например:
get_nesting(A::B::C) # => [A::B::C, A::B, A]
Однако я не могу понять, как вызвать Module.nesting
в другом контексте. Я пытался использовать instance_exec
, но это просто возвращает вложение в текущей области.
module X
def self.get_nesting(m)
m.instance_exec { Module.nesting }
end
end
X.get_nesting(A::B::C) # => [X]
Я хочу, чтобы это вернуло [A::B::C, A::B, A]
.
Есть ли способ получить вложение для модуля таким способом, используя Module.nesting
или иначе?