Как остановить принудительное пространство имен модулей в консоли Elixir Phoenix iex?

При использовании iex консоль из моего приложения Phoenix, следующим образом:

iex -S mix phx.server

Я не могу позвонить System функции, такие как System.stop(1) или же System.halt(1) как это заставляет пространство имен в передней части модуля. В результате возникает ошибка, так как этот модуль пространства имен не существует.

** (UndefinedFunctionError) function MyApp.SomeNamespace.System.stop/1 is undefined or private

Почему он добавляет пространство имен к этому модулю ядра? Почему он производит эту ошибку с модулем, как System, но не с такими модулями, как Enum, List, или же Map?

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

При дальнейшей проверке я могу заставить его работать, позвонив Elixir.System.stop/1, Почему мне нужно предварять System модуль с Elixir. но мне не нужно делать это для других модулей Elixir?

В своем коде приложения я называю такие вещи как System.backtrace или же System.get_env без псевдонимов или пространств имен не требуется. У меня также нет названных модулей System в приложении (т.е. нет Myapp.System или подобный модуль определен).

1 ответ

Решение

Найдите файл iex.exs. Если такой файл существует, он автоматически запускается при запуске iex. Если вы ссылаетесь на пространства имен в iex.exs, это объясняет это поведение.

Вы можете узнать больше в документации https://hexdocs.pm/iex/IEx.html

Другие вопросы по тегам