Как остановить принудительное пространство имен модулей в консоли 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 или аналогичный модуль).


person Todd    schedule 03.08.2018    source источник
comment
Проверьте, есть ли у вас .iex.exs файл где-то присутствует.   -  person Onorio Catenacci    schedule 03.08.2018
comment
@OnorioCatenacci действительно, этот файл существует, и я обнаружил там некоторый код, который, кажется, является виновником поведения, которое я наблюдал. Спасибо! Я не знал о таком файле конфигурации. Как вы думаете, вы могли бы сформулировать ответ из этого?   -  person Todd    schedule 03.08.2018


Ответы (1)


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

Вы можете узнать больше в документах https://hexdocs.pm/iex/IEx.html#module-the-iex-exs-file

person Onorio Catenacci    schedule 04.08.2018
comment
Это действительно было источником поведения, которое я наблюдал! - person Todd; 06.08.2018