记录(record)
记录实际上是元组的另外一种形式。经过使用记录,能够给元组里的各个元素关联一个名称。java
-record(Name,{ Key1 = Default1, Key2 = Default2, ... key3, })
#Name{Key1=Val1,Key2=Val2...}. % 全部的键都是原子
用模式匹配操做符
映射组
:映射组是键值对的关联性集合。键能够是任意的Erlang数据类型。(c++/java里的map,哈希表)。c++
#{ Key1 Op Val1,Key2 Op Val2,...}
=>
或者:=
=>
能够更新现有键的值,若是现有键不存在则建立新的键。 :=
只能用来更新现有键的值,若是键不存在则报错。函数
record或者有几个参数写几个,咱们习惯这样
map不是不行,只不过1)受到版本限制;2)须要用注解的形式告诉使用者能够填哪些参数;3)万必定义和使用时写的不一样名字,不能经过编译器来发现问题
由于是非静态类型语言,原本编译期内发现问题的机会已经减小不少了,还处处是map,就更难经过编译器发现问题了~
map有个好处,record没有的,是若是用map代替record,那么就不存在record改了线上不能热更的问题~:D
map我认为应该用在不肯定参数的场合;而若是是参数肯定的,可是可填可不填,其实用map, record, 参数列表,没什么区别,都是要去判断~code
异常错误是系统内部发生错误,或者经过在代码里显式调用exit(Exception)、throw(Exception)或error(Exception)时发出的信息。
典型内部错误有进程
exit(Why).
通常用于终止当前进程error(Why).
指示“崩溃性错误”,也就是调用者没有准备好处理的很是严重的问题,与内部错偏差很少。throw(Why).
抛出一个调用者有可能想要捕捉的异常错误。try FunOrExperssionSeq of Pattern1[when guard1] -> Experssions1; Pattern2[when guard2] -> Experssions2; ... catch ExceptionType1:Expattern1 [when ExGuard1] -> ExExpressions1; ExceptionType2:Expattern2 [when ExGuard2] ->ExExpressions2; ... after AfterExperssions end
catch FunOrExperssionSeq
spec
:类型规范type
:类型声明