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

标签 namespaces elixir phoenix dotfiles elixir-iex

使用 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.backtraceSystem.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/

相关文章:

php - 使用 Composer 和 autoload.php 在 PHPUnit 中自动加载类

elixir - 如何添加条件必填字段?

hadoop - Phoenix 表上的配置单元查询抛出ColumnNotFoundException

sql - Phoenix 映射现有的 HBase 表

python - 有没有办法访问用装饰器定义的Python函数的 namespace ?

c++ - 如何指示命名空间仅供库使用?

python - Python 中的模块、类和命名空间

elixir - 升级到 elixir 1.6.1 时出现 Mix.Shell.cmd 错误

elixir - 如何在 Elixir 中获取当前操作系统名称?

hadoop - Phoenix JDBC连接时间太长