gpt4 book ai didi

Elixir:使用与导入

转载 作者:行者123 更新时间:2023-12-03 04:32:28 25 4
gpt4 key购买 nike

useimport 有什么区别?

use is a simple mechanism for using a given module into the current context

https://hexdocs.pm/elixir/Kernel.SpecialForms.html#import/2

Imports function and macros from other modules

看起来一个区别是 import 让您选择特定的函数/宏,而 use 则引入所有内容。

还有其他区别吗?您什么时候会使用其中一种而不是另一种?

最佳答案

import ModuleModule 的所有未命名空间的函数和宏引入到您的模块中。

require Module 允许您使用 Module 的宏,但不导入它们。 (Module 的功能始终在命名空间中可用。)

use Module 首先 requires 模块,然后调用 Module 上的 __using__ 宏>.

考虑以下因素:

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

这不会编译,因为 ModA.moda() 尚未导入 ModB

以下内容将编译:

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

当您使用d ModA时,它会生成一个import语句,该语句被插入到ModB中。

关于Elixir:使用与导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28491306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com