如何在Elixir Phoenix iex控制台中停止强制模块命名空间?

时间:2018-08-03 18:32:50

标签: namespaces elixir phoenix dotfiles iex

在Phoenix应用程序中使用iex控制台时,如下所示:

iex -S mix phx.server

我似乎无法调用System函数,例如System.stop(1)System.halt(1),因为它会将名称空间强制置于模块的前面。由于该命名空间模块不存在而导致错误。

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

为什么它将名称空间放在此核心模块的前面?为什么使用System这样的模块而不是EnumListMap这样的模块会产生此错误?

此外,如果我在应用程序源之外使用iex,则可以按预期方式调用System.any_function

在进一步检查中,我可以通过致电Elixir.System.stop/1使它正常工作。为什么我需要在System模块前面加上Elixir.,但不需要为其他Elixir模块这样做呢?

在我的应用程序代码中,我调用System.backtraceSystem.get_env之类的东西,而无需别名或命名空间。我在应用程序中也没有名为System的模块(即,没有定义Myapp.System或类似的模块)。

1 个答案:

答案 0 :(得分:1)

寻找一个iex.exs文件。如果有这样的文件,它将在运行iex时自动运行。如果在iex.exs中引用名称空间,则可以解释此行为。

您可以在文档https://hexdocs.pm/iex/IEx.html#module-the-iex-exs-file

中找到更多信息