在我的 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.backtrace或System.get_env不需要别名或命名空间的东西。我也没有System在应用程序中命名的模块(即,没有Myapp.System定义或类似的模块)。