内置函数
内置函数简称为BIF(built-in function),是作为Erlang语言定义一部分的函数。
有些内置函数是用Erlang实现的,但大多数是用Erlang虚拟机里的底层操作实现的。
所有内置函数都表现得像是属于 erlang 模块,但最常用的内置函数而无需用 erlang: 使用
类型转换
方法 | 说明 | 举例 |
---|---|---|
atom_to_list/1 | 原子转列表 | 1> atom_to_list(hello). “hello” |
list_to_atom/1 | 列表转原子 | 2> list_to_atom(“hello”). hello |
binary_to_list/1 | 二进制转列表 | 3> binary_to_list(<<“hello”>>). "hello" 4> binary_to_list(<<104,101,108,108,111>>). “hello” |
list_to_binary/1 | 列表转二进制 | 5> list_to_binary(“hello”). <<104,101,108,108,111>> |
float_to_list/1 | 浮点转列表 | 6> float_to_list(7.0). “7.00000000000000000000e+00” |
list_to_float/1 | 列表转浮点 | 7> list_to_float(“7.000e+00”). 7.0 |
integer_to_list/1 | 整型转列表 | 8> integer_to_list(77). “77” |
list_to_integer/1 | 列表转整型 | 9> list_to_integer(“77”). 77 |
tuple_to_list/1 | 元组转列表 | 10> tuple_to_list({a,b,c})., [a,b,c] |
list_to_tuple/1 | 列表转元组 | 11> list_to_tuple([a,b,c]). {a,b,c} |
term_to_binary/1 | 12> term_to_binary({a,b,c}). <<131,104,3,100,0,1,97,100,0,1,98,100,0,1,99>> | |
binary_to_term/1 | 13> binary_to_term(<<131,104,3,100,0,1,97,100,0,1,98,100,0,1,99>>). {a,b,c} | |
binary_to_term/2 | ||
binary_to_integer/1 | 二进制转整型 | 14> binary_to_integer(<<“77”>>). 77 |
integer_to_binary/1 | 整型转二进制 | 15> integer_to_binary(77). <<“77”>> |
float_to_binary/1 | 浮点转二进制 | 16> float_to_binary(7.0). <<“7.00000000000000000000e+00”>> |
binary_to_float/1 | 二进制转浮点 | 17> binary_to_float(<<“7.000e+00”>>). 7.0 |
类型判断
函数 | 说明 | 示例 |
---|---|---|
is_number(X) | X是一个整数或浮点数 | |
is_integer(X) | X是一个整数 | |
is_float(X) | X是一个浮点数 | |
is_atom(X) | X是一个原子 | |
布尔值 | ||
is_tuple(X) | X是一个元组 | |
is_list(X) | X是一个列表 | |
字符串 | ||
is_map(X) | X是一个映射组 | |
is_record(X,Tag) | X是一个类型为Tag的记录 | |
is_record(X,Tag,N) | X是一个类型为Tag、大小为N的记录 | |
is_function(X) | X是一个fun | |
is_function(X, N) | X是一个带有N个参数的fun | |
is_binary(X) | X是一个二进制型 | |
is_pid(X) | X是一个进程标识符 | |
is_port(X) | X是一个端 | |
is_pmod(X) | X是一个参数化模块的实例 | |
is_constant(X) | X是一个常量 | |
is_reference(X) | X是一个引用 |
常用函数
函数 | 说明 | 示例 |
---|---|---|
abs(Number) | 求绝对值 | |
bit_size(Binary) | 求位数 | |
byte_size(Binary) | 求字节数 | |
element(N, Tuple) | N是否是元组的元素 | |
float(Term) | 换成一个浮点数, Term 必须是一个数字 | |
hd(List) | 返回列表头 | |
length(List) | 求列表的长度 | |
node() | 当前的节点 | |
node(Pid|Ref|Port) | 创建节点, Pid(进程标识符)、Ref(引用)、Port(端口) | |
round(Number) | 将X转换成一个整数 | |
self() | 返回当前进程标识符 | |
size(X) | X的大小,它可以是一个元组或二进制型 | |
trunc(Number) | 将X去掉小数部分,取整 | |
tl(List) | 返回列表尾 | |
tuple_size(Tuple) | 元组的大小 | |
time/0 | 获取时间 | time(). |
lists
%% 遍历列表
1> lists:map(fun(X) -> 2*X end, [1, 2, 3, 4]).
[2,4,6,8]
%% 过滤列表
2> lists:filter(
fun(X) -> lists.member(X, [apple, pear, orange]) end,
[dog, orange, cat, apple, bear]
).
[orange, apple]
binary
- 二进制内置函数
- list_to_banary(L) -> B
返回二进制型,通过把 io 列表(iolist) L 里的所有元素压扁后形成的(压扁就是移除列表里所有的括号)。
io列表本身是循环定义的,是指一个列表所包含的元素是0~255的整数、二进制型或者其他io列表。1> Bin1 = <<1,2,3>>. %<<1,2,3>> 2> Bin2 = <<4,5>>. %<<4,5>> 3> Bin3 = <<6>>. %<<6>> 4> list_to_binary([Bin1, 1, [2, 3, Bin2], 4|Bin3]). <<1,2,3,1,2,3,4,5,4,6>>
- term_to_binary(Term) -> Ext_B 把任何erlang数据类型转换成二进制型。
- binary_to_term(Bin) -> Term 将二进制型转回来
- byte_size(Bin) -> Size 返回二进制型的字节数
- split_binary(Bin,Pos) -> {B1,B2} 在 pos 处把二进制型 Bin 一分为二
- list_to_banary(L) -> B