0

在我的 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,但不会使用类似Enum、、List或的模块Map

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

经过进一步检查,我可以通过调用Elixir.System.stop/1. 为什么我需要在System模块前面加上Elixir.但我不需要为其他 Elixir 模块这样做?

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

4

1 回答 1

1

查找 iex.exs 文件。如果有这样的文件,它会在 iex 运行时自动运行。如果您在 iex.exs 中引用可以解释此行为的命名空间。

您可以在文档https://hexdocs.pm/iex/IEx.html#module-the-iex-exs-file中找到更多信息

于 2018-08-04T00:53:19.143 回答