Module 长生不老药-什么是';使用';你要做什么?

Module 长生不老药-什么是';使用';你要做什么?,module,macros,functional-programming,erlang,elixir,Module,Macros,Functional Programming,Erlang,Elixir,我怀疑这是一个基本问题,但在网上很难找到一个简洁、规范的答案 从我所知的一点点 它不同于“需要”和“导入” 它用于导入模块的内容 这是一个宏 有人能澄清吗?它要求调用给定的模块,然后使用其上的回调调用\u,允许模块向当前上下文中注入一些代码。看 例如: defmodule Test do use Utility, argument: :value end 大约和 defmodule Test do require Utility Utility.__using__(argume

我怀疑这是一个基本问题,但在网上很难找到一个简洁、规范的答案

从我所知的一点点

  • 它不同于“需要”和“导入”
  • 它用于导入模块的内容
  • 这是一个宏

有人能澄清吗?

要求
调用给定的模块,然后使用其上的回调调用
\u,允许模块向当前上下文中注入一些代码。看

例如:

defmodule Test do
  use Utility, argument: :value
end
大约和

defmodule Test do
  require Utility
  Utility.__using__(argument: :value)
end

为答案干杯。后续问题。。。当您使用Mix设置新的OTP应用程序时,我是否必须“要求/使用/导入”我在/lib文件夹中创建的模块?因为在编译之后,它看起来可以(例如)在没有显式导入指令的情况下从A.C调用A.B.method。
require
与函数无关,它只是使
require
'd模块中的宏可用于当前词法范围。只要编译了文件,就可以通过完全指定
Module.function\u name
来调用任何函数。如果您使用导入,您可以使用
function\u name
省略
模块
,例如,如果您在某些文件中大量使用某个模块中的函数,则该模块可能会更干净。@obrok-Awesome回复(对注释中的问题)。这正是我想要确认的。值得一提的是,@sasajuri在博客上发表了一系列关于宏的精彩文章,他在这里深入介绍了用法声明:为什么这上面有Erlang标记?我想可能有相当多的人对这两种语言都感兴趣。。也不能确定Erlang本身是否有一个等效的特性,或者它的virtual machine.elixir文档。在谷歌搜索十分钟后,我找不到答案,
入门