require和import有什么区别?
iex> require Integer
Integer
iex> Integer.is_odd(3)
true
和
iex> import List, only: [duplicate: 2]
List
iex> duplicate :ok, 3
[:ok, :ok, :ok]
似乎他们都做同样的事情......从其他模块中获取宏或函数。
答案 0 :(得分:3)
每当我们想要从其他模块轻松访问函数或宏而不使用完全限定名称时,我们就会使用import。
也
请注意,
importing
模块会自动requires
。
因此,如果您import Integer
,您可以直接致电is_odd
,您不需要Integer.is_odd
答案 1 :(得分:1)
根据此article:
在编译过程中正在评估宏功能。如果要使用它,则需要先对其进行编译。这正是
require
的作用。
在后台,它还为所需模块提供了别名,这意味着您可以像使用as
一样传递alias
选项:
require TestModule, as: Test
import指令允许您通过导入全部或某些功能/宏来跳过模块部分:
import IO, only: [puts: 1]
puts "Hello"
如前所述,它还会在后台调用require
来首先对其进行编译。