Эликсир: имена модулей с точками и вложенными модулями - эквивалентны ли они?
Под эквивалентными кодами? Что касается вызова модульного метода, в обоих случаях используется Utilities.StringUtils.some_method(...)
Вложенные модули
defmodule Utilities do
defmodule StringUtils do
end
end
Модули с точкой в названии
defmodule Utilities.StringUtils do
end
Ответы
Ответ 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.