BIF (内建函数)
% 元组转换成列表
1> tuple_to_list({12,cat,"hellp"}).
[12,cat,"hellp"]
% 返回当前时分秒
2> time().
{17,55,23}
二进制数据
1> <<5,10,20>>.
<<5,10,20>>
2> <<"hello">>.
<<"hello">>
3> <<99,97,116>>.
<<"cat">>
操纵二进制数据的 BIF
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>>
5> split_binary(<<1,2,3,4,5,6,7,8,9,10>>,3).
{<<1,2,3>>,<<4,5,6,7,8,9,10>>}
6> B = term_to_binary({binaries,"are",useful}).
<<131,104,3,100,0,8,98,105,110,97,114,105,101,115,107,0,3,
97,114,101,100,0,6,117,115,101,102,117,108>>
7> binary_to_term(B).
{binaries,"are",useful}
8> size(<<1,2,3,4,5>>).
5
比特语法
将 X, Y, Z 封装在一个 16 bit 字长的内存区域 , X 占 3bit , Y 占 7bit , Z 占 6bit
1> X = 2.
2
2> Y = 61.
61
3> Z = 20.
20
4> M = <<X:3, Y:7, Z:6>>.
<<"OT">>
5> <<X1:3, Y1:7, Z1:6>> = M.
<<"OT">>
6> X1.
2
7> Y1.
61
8> Z1.
20
小问题集锦
apply , 将模块中的函数应用到参数上面去 :
1> apply(erlang, atom_to_list, [hello]).
"hello"
属性 :
-module(modname). % 模块声明
-import(lists, [map/2]). % 从别的模块导入函数
-export([a/2, b/1]). % 导出函数
-compile(Options). % 添加编译选项
-vsn(Version). % 指定模块版本
块表达式 :
begin
Expr1,
...,
Expr2
end
布尔类型 :
1> true.
true
2> false.
false
布尔表达式 :
not B1.
B1 and B2.
B1 or B2.
B1 xor B2.
短路布尔表达式 :
Expr1 orelse Expr2.
% 先求表达式 Expr1 , 如果 Expr1 为 true , 则不会求 Expr2 的值 (即被短路了) ; 如果 Expr1 为 false , 则会对 Expr2 求值
Expr1 andalso Expr2.
% 先对 Expr1 求值 , 如果为 true , 那么 必须对 Expr2 求值 ; 如果 Expr1 为 false , 则不对 Expr2 求值
包含文件 :
-include(Filename).
-include(Libname).
列表操作符 ++
和 --
1> [1,2,3] ++ [4,5,6].
[1,2,3,4,5,6]
2> [1,2,3] -- [1].
[2,3]
3> [1,1,2,3] -- [1].
[1,2,3]
4> [1,1,2,3] -- [1,1].
[2,3]
宏 :
%% m1.erl
-module(m1).
-export([start/0]).
-ifdef(debug).
-define(TRACE(X), io:format("TRACE ~p:~p ~p~n",[?MODULE, ?LINE, X])).
-else.
-define(TRACE(X), void).
-endif.
start() -> loop(5).
loop(0) ->
void;
loop(N) ->
?TRACE(N),
loop(N-1).
%% cmd
1> c(m1,{d,debug}).
{ok,m1}
2> m1:start().
TRACE m1:15 5
TRACE m1:15 4
TRACE m1:15 3
TRACE m1:15 2
TRACE m1:15 1
void
数值类型 :
整型 :
% 2 进制数
1> 2#00101010.
42
% 16 进制数
2> 16#af6bfa23.
2943089187
3> 13.
13
4> -18.
-18
浮点型 :
1> 1.0.
1.0
2> 3.1415926.
3.1415926
3> -2.3e+6.
-2.3e6
4> 23.56E-27.
2.356e-26
进程字典 :
1> erase().
[]
2> put(x,20).
undefined
3> get(x).
20
4> get(y).
undefined
5> put(y,40).
undefined
6> get(y).
40
7> get().
[{x,20},{y,40}]
8> erase(x).
20
9> get().
[{y,40}]
作者 Github : tojohnonly , 博客 : EnskDeCode