【问题标题】:Elixir - What does the 'use' keyword do?Elixir - 'use' 关键字有什么作用?
【发布时间】:2015-05-19 19:29:50
【问题描述】:

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

据我所知;

  • 它不同于“require”和“import”
  • 用于导入模块内容。
  • 这是一个宏

谁能澄清一下?

【问题讨论】:

  • 对于它的价值@SasaJuric 做了一系列关于宏的优秀博客文章,他在这里深入介绍了使用声明:theerlangelist.com/2014/06/…
  • 为什么上面有 Erlang 标签?
  • 认为可能有相当多的人对这两种语言都感兴趣。也不确定 Erlang 本身是否有等效功能,或者它是虚拟机。
  • 长生不老药差的文档。在谷歌和getting-started搜索十分钟后我找不到答案。

标签: module macros functional-programming erlang elixir


【解决方案1】:

requires 给定模块,然后调用它的__using__/1 回调,允许模块将一些代码注入当前上下文。见https://elixir-lang.org/getting-started/alias-require-and-import.html#use

例子:

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 模块中的宏可用于当前词法范围。 elixir-lang.org/getting-started/alias-require-and-import.html
  • 只要你的文件被编译,你就可以通过完全指定Module.function_name来调用任何函数。如果您使用导入,则可以使用 function_name 省略 Module,这对于您在某些文件中大量使用某个模块中的函数的情况可能更清晰。
  • @obrok - 很棒的回复(对评论中的问题)。正是我想要确认的。
猜你喜欢
  • 2017-05-07
  • 2019-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-14
  • 2010-11-15
  • 2019-10-19
相关资源
最近更新 更多