使用 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
或类似的模块)。
最佳答案
查找 iex.exs 文件。如果有这样的文件,它会在运行 iex 时自动运行。如果您在 iex.exs 中引用命名空间,则可以解释这种行为。
您可以在文档 https://hexdocs.pm/iex/IEx.html#module-the-iex-exs-file 中找到更多信息
关于namespaces - 如何在 Elixir Phoenix iex 控制台中停止强制模块命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51678308/