alias
alias(module, opts)
alias 顾名思义就是设置别名。
比如
defmodule Math do
alias MyKeyword, as: Keyword
end
MyKeyword设置别名为Keyword,访问Keyword就相当于MyKeyword,如果要访问原始的
Keyword模块的话需要在Elixir
名称空间下。
Keyword.values #=> uses MyKeyword.values
Elixir.Keyword.values #=> uses Keyword.values
当然 as
选项也不是必须的, 不加as选项的话最后一部分会作为模块名
alias Foo.Bar.Baz
相当于
alias Foo.Bar.Baz, as: Baz
import
import(module, opts)
作用是导入其它模块的函数
比如
iex> import List
iex> flatten([1, [2], 3])
[1,2,3]
默认是导入模块中所有public的函数,当然也有only
选项和except
选项可以使用。
比如只导入List模块的函数或者宏
import List, only: :functions
import List, only: :macros
也可以指定函数
import List, only: [flatten: 1]
import String, except: [split: 2]
函数是要有arities(参数个数)的
另外,这个例子中,except声明包含前面only声明的函数flatten
,结果是这个函数不会被导入。
import List, only: [flatten: 1, keyfind: 3]
import List, except: [flatten: 1]
require
require(module, opts)
require作用是编译加载给定的模块
如果想使用另一个模块的宏,你必须使用require 模块,然后才能调用,否则会报异常
defmodule Math do
require MyMacros
MyMacros.if do_something, it_works
end
因为宏展开是发生在编译时的,使用require可以确保模块被编译
例子:
iex> Integer.odd?(3)
** (CompileError) iex:1: you must require Integer before invoking the macro Integer.odd?/1
iex> require Integer
nil
iex> Integer.odd?(3)
true
Integer.odd?/1
是一个宏,要想调用必须先require
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。