use
和 import
有什么区别?
https://hexdocs.pm/elixir/Kernel.SpecialForms.html#import/2
看起来一个区别是 import
让我们选择特定的函数/宏,而 use
则包含所有内容。
还有其他区别吗?你什么时候会使用一个?
最佳答案
import Module
将 Module
的所有函数和宏带入您的模块。
require Module
允许您使用 Module
的宏,但不导入它们。 (Module
的函数总是可用的命名空间。)
use Module
第一个 requires
模块然后调用 0x2518122313431423111 上的 0x2518122313431421 宏。
考虑以下:
defmodule ModA do
defmacro __using__(_opts) do
IO.puts "You are USING ModA"
end
def moda() do
IO.puts "Inside ModA"
end
end
defmodule ModB do
use ModA
def modb() do
IO.puts "Inside ModB"
moda() # <- ModA was not imported, this function doesn't exist
end
end
这不会编译,因为
__using__
尚未导入 Module
。以下将编译:
defmodule ModA do
defmacro __using__(_opts) do
IO.puts "You are USING ModA"
quote do # <--
import ModA # <--
end # <--
end
def moda() do
IO.puts "Inside ModA"
end
end
defmodule ModB do
use ModA
def modb() do
IO.puts "Inside ModB"
moda() # <-- all good now
end
end
当您
ModA.moda()
d ModB
时,它生成了一个 use
语句,该语句被插入到 ModA
中。关于Elixir:使用 vs 导入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28491306/