1.apply
向一个模块的某个函数传递参数并调用次函数,与直接调用的区别在于,模块名和函数名可以动态计算
eg:apply(erlang,atom_to_list,[hello]). %用apply调用BIF
缺点:要尽量避免使用,因为编译器不能进行优化。
2.-AtomTag()
为模块属性,定义文件属性,Erlang模块属性分为预定义和用户定义属性,
1.预定义:-module(m), 模块名
-import(mod,[Name/1]).从别的模块导入参数或函数
2.用户定义模式:
-SomeTag(Value)
3.布尔类型
用原子true,false
not B1 逻辑非
B1 and B2 逻辑与
B1 or B2 逻辑或
B1 xor B2 逻辑异或
4.列表操作符++和--
++ -- 是对列表进行添加和删除的中缀操作符
1> [1,2]++[4,5].
[1,2,4,5]
2> [a,c,1,2]--[1,2].
[a,c]
3> [a,1,1,1,]--[1,1].
* 1: syntax error before: ']'
3> [a,1,1,1,2]--[1,1].
[a,1,2]
4> [a,1,1,1,2]--[1,1,1].
[a,2]
5> [a,1,1,1,2]--[1,1,1,1].
[a,2]
6>
模式匹配中的++
直接在后面添加
5.宏定义
当Erlang预处理epp到?Module时,这个宏就会被预处理器扩展,在宏定义中出现的变量就会匹配到宏调用处的完整形式
eg:
-define(mac(X,Y),{a,X,Y}).
fo(A)->
?mac(A+10,b).
这个宏执行之后
fo(A)->
{a,A+10,b}.
一些当前模块的宏定义信息
?FILE 扩展当前文件名。
?MODULE 当前模块名
?LINE 当前行号。
6.宏定义流程
在宏的内部,还支持流程指令
-undef(Mac):取消宏定义,
-ifdef(Mac):只有Mac被定义之后才能进行代码运算。
-ifndef(Mac):只有在不定义Mac之后才能进行代码运算
-else 在ifdef或ifndef 之后出现,如果条件为 false,后面代码才能执行,
-endif 标记ifdef,indef结束。
7.数值类型
Erlang 的数值类型为整型,浮点型
浮点型范围为-10的323次方-10的308次方
8.操作符优先级
:,#,
9.进程字典
Erlang 每个进程都有自己私有的数据存储,为进程字典,(其他语言的映射)
语法为:put(Key,Value),如果之前没有关联,返回值为 undefined
get(Key)->Value
get() ->[{Key,Value}].返回整个字典
get_keys(Value)-> [Key] 返回键值
erase()-> 删除
*** 进程字典定义之后,再定义时就是覆盖掉先前定义的字典 所以尽量避免使用。
10.引用
引用是全局唯一的erlang值,使用erlang:make_ref()创建,适用于创建那些唯一标签的场合。
11.比较表达式:
Erlang 类型大小顺序
number<atom(原子)<reference(参数,引用)<
fun<port(端口)<pid<tuple(元组)<list<binary
12.下划线变量
1.命名一个不准备使用的变量 open(File,_Mode)
比open(File,_)更具可读行。
2.some_func(X)->
{P,Q}=some_func(X),
io:format("Q=~p~n",[Q]),
p.%这样编译不会报错
但要是注释掉io输出语句就会警告,要是把Q换成_Q 就不会出警告
向一个模块的某个函数传递参数并调用次函数,与直接调用的区别在于,模块名和函数名可以动态计算
eg:apply(erlang,atom_to_list,[hello]). %用apply调用BIF
缺点:要尽量避免使用,因为编译器不能进行优化。
2.-AtomTag()
为模块属性,定义文件属性,Erlang模块属性分为预定义和用户定义属性,
1.预定义:-module(m), 模块名
-import(mod,[Name/1]).从别的模块导入参数或函数
2.用户定义模式:
-SomeTag(Value)
3.布尔类型
用原子true,false
not B1 逻辑非
B1 and B2 逻辑与
B1 or B2 逻辑或
B1 xor B2 逻辑异或
4.列表操作符++和--
++ -- 是对列表进行添加和删除的中缀操作符
1> [1,2]++[4,5].
[1,2,4,5]
2> [a,c,1,2]--[1,2].
[a,c]
3> [a,1,1,1,]--[1,1].
* 1: syntax error before: ']'
3> [a,1,1,1,2]--[1,1].
[a,1,2]
4> [a,1,1,1,2]--[1,1,1].
[a,2]
5> [a,1,1,1,2]--[1,1,1,1].
[a,2]
6>
模式匹配中的++
直接在后面添加
5.宏定义
当Erlang预处理epp到?Module时,这个宏就会被预处理器扩展,在宏定义中出现的变量就会匹配到宏调用处的完整形式
eg:
-define(mac(X,Y),{a,X,Y}).
fo(A)->
?mac(A+10,b).
这个宏执行之后
fo(A)->
{a,A+10,b}.
一些当前模块的宏定义信息
?FILE 扩展当前文件名。
?MODULE 当前模块名
?LINE 当前行号。
6.宏定义流程
在宏的内部,还支持流程指令
-undef(Mac):取消宏定义,
-ifdef(Mac):只有Mac被定义之后才能进行代码运算。
-ifndef(Mac):只有在不定义Mac之后才能进行代码运算
-else 在ifdef或ifndef 之后出现,如果条件为 false,后面代码才能执行,
-endif 标记ifdef,indef结束。
7.数值类型
Erlang 的数值类型为整型,浮点型
浮点型范围为-10的323次方-10的308次方
8.操作符优先级
:,#,
9.进程字典
Erlang 每个进程都有自己私有的数据存储,为进程字典,(其他语言的映射)
语法为:put(Key,Value),如果之前没有关联,返回值为 undefined
get(Key)->Value
get() ->[{Key,Value}].返回整个字典
get_keys(Value)-> [Key] 返回键值
erase()-> 删除
*** 进程字典定义之后,再定义时就是覆盖掉先前定义的字典 所以尽量避免使用。
10.引用
引用是全局唯一的erlang值,使用erlang:make_ref()创建,适用于创建那些唯一标签的场合。
11.比较表达式:
Erlang 类型大小顺序
number<atom(原子)<reference(参数,引用)<
fun<port(端口)<pid<tuple(元组)<list<binary
12.下划线变量
1.命名一个不准备使用的变量 open(File,_Mode)
比open(File,_)更具可读行。
2.some_func(X)->
{P,Q}=some_func(X),
io:format("Q=~p~n",[Q]),
p.%这样编译不会报错
但要是注释掉io输出语句就会警告,要是把Q换成_Q 就不会出警告