記錄(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
:類型聲明