Подтвердить что ты не робот

Эликсир: имена модулей с точками и вложенными модулями - эквивалентны ли они?

Под эквивалентными кодами? Что касается вызова модульного метода, в обоих случаях используется Utilities.StringUtils.some_method(...)

Вложенные модули

defmodule Utilities do
   defmodule StringUtils do
   end
end

Модули с точкой в ​​названии

defmodule Utilities.StringUtils do
end
4b9b3361

Ответ 1

Да и нет. Первое определение автоматически определяет псевдоним, основанный на имени модуля:

defmodule Utilities do
  defmodule StringUtils do
  end

  # Can access the module as StringUtils
end

Пока второе:

defmodule Utilities.StringUtils do
  # Cannot access the module as StringUtils
end

Кроме этого, код и модуль, определенные ими, являются точно такими же.

Ответ 2

Да, оба переведены точно в символ (в Erlang на модуль ссылается его символ):

:"Elixir.Utilities.StringUtils"

В Erlang нет действительно вложенных модулей, это просто эмуляция Elixir.