В Elixir нет понятия вложенных модулей. Модуль A.B
буквально не имеет ничего общего с модулем A
, за исключением использования его имени в качестве пространства имен.
Но то, что вы спрашиваете, все еще возможно для модулей с глубоким пространством имен.
defmodule A do
defmodule B do
def b, do: IO.puts :b
defmodule C do
def c, do: IO.puts :c
end
end
end
Для кода выше можно Kernel.SpecialForms.alias/2
и A.B
и A.B.C
в пределах одного вызова:
alias A.{B, B.C}
#⇒ [A.B, A.B.C]
C.c
#⇒ c
Тот же синтаксис будет работать для Kernel.SpecialForms.require/2
, Kernel.SpecialForms.import/2
и Kernel.use/2
.
К сожалению, трюк с фигурными скобками не работает на верхнем уровне (alias {A, A.B}
не сработает.) Может быть, это был бы хороший пиар для ядра Elixir.