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