在 Elixir 中,为啥在导入模块时“别名”优于“导入”?

Posted

技术标签:

【中文标题】在 Elixir 中,为啥在导入模块时“别名”优于“导入”?【英文标题】:In Elixir, why is "alias" preferred over "import" for importing the modules?在 Elixir 中,为什么在导入模块时“别名”优于“导入”? 【发布时间】:2022-01-03 12:37:49 【问题描述】:

请注意,该语言通常不鼓励导入。在编写自己的代码时,更喜欢使用别名而不是导入。

我在documentation 中找到了这个声明,但那里没有进一步的解释。

【问题讨论】:

【参考方案1】:

几个原因:

import 在这些模块之间创建了编译时依赖关系,这意味着导入模块编译需要等到导入模块编译完成。 alias 不要创建这样的依赖。 import 将使对导入函数的所有调用都像本地调用一样,而alias 将使它们仍然像远程调用一样。这是非常重要的区别,但超出了这个问题的范围。简而言之 - 热升级时本地呼叫“不起作用”。 imports 经常会带入过多的模块作用域,当导入的模块会添加更多函数时会导致编译冲突(不能定义与导入函数同名的函数)。

【讨论】:

以上是关于在 Elixir 中,为啥在导入模块时“别名”优于“导入”?的主要内容,如果未能解决你的问题,请参考以下文章

在 Elixir 或 Erlang 中,如何在运行时动态创建和加载模块?

Elixir:应用程序立即退出,或者在运行 distillery 包时没有收到输入。为啥它会以这种方式工作,以及如何解决它?

如何在Elixir或Erlang中在运行时动态创建和加载模块?

python中pil如何导入?

为啥python不会在启动时自动导入每个模块?

为啥在 Ruby 中构建字符串时,铲子运算符 (<<) 优于加号 (+=)?