記錄record:shell
是元組的另外一種形式json
-record(Name, { key1 = Default1, key2 = Default2, ... key3, ... }).記錄比較像C++的結構和類。
-record(todo, {status = reminder, who = joe, text}).定義一個叫作todo的記錄。指定了默認值。
31> rr("test.hrl"). [todo]在shell裏面讀入記錄的定義。rr()是read records的縮寫。
32> #todo{}. %建立一個todo對象 #todo{status = reminder,who = joe,text = undefined} 33> X1 = #todo{status=urgent, text="Fix errata in book"}.%建立一個to對象 #todo{status = urgent,who = joe,text = "Fix errata in book"} 34> X2 = X1#todo{status=done}.%建立一個to對象,使用X1來複制 #todo{status = done,who = joe,text = "Fix errata in book"}提取字段,採用模式匹配的方式,或者單個字段訪問
37> #todo{who = W, text = Txt} = X2. #todo{status = done,who = joe,text = "Fix errata in book"} 38> W. joe 39> Txt. "Fix errata in book" 40> X2#todo.text. "Fix errata in book"函數裏模式匹配記錄
f(#todo{status= S, who=W} = R)-> R#todo{status=finished}%整個記錄進行操做 S = finished%單個字段操做 do_something(X) when is_record(X, todo) ->%匹配特定類型的記錄 ...
A = #{Key1 Op Val1, Key2 Op Val2, ..., KeyN Op ValN}. B = A#{Key1 Op Val1, Key2 Op Val2, ..., KeyN Op ValN}.表達式K => Val1有兩種用途,一種是現有鍵K的值更新爲新值V,另外一種是給映射組添加一個全新的K-V對。
maps:new()->#{} 返回一個空映射組。 erlang:is_map(M)->bool() 若是M是映射組就返回true,不然返回false。 maps:to_list(M)->[{K1,V1},...,{KN,VN}]把映射組M裏的全部鍵和值轉換成爲一個鍵值列表。
maps:from_list([{K1,V1},...,{KN,VN}])->M 把一個包含鍵值對的列表轉換成映射組。 maps:map_size(Map)->NumberOfEntries 返回映射組的條目數量 maps:is_key(key,Map)->bool() 若是映射組包含一個鍵爲Key的項就返回true,不然返回false。 maps:get(Key,Map)->Val 返回映射組裏與Key關聯的值,不然拋出一個異常錯誤。 maps:find(Key,Map)->{ok,Value}|error 返回應這組裏與Key關聯的值,不然返回error。 maps:keys(Map)->[Key1,...,KeyN] 返回映射組包含的鍵列表,按升序排列。 maps:remove(Key,M)->M1 返回一個新映射組M1,移除了Key。 maps:without([Key1,...,KeyN],M)->M1 返回一個新的映射組M1,移除了[Key1,...,KeyN]列表的元素。 maps:difference(M1, M2)->M3 M3是M1的複製,移除了M2。映射組能夠比較大小,先按長度,而後按元素的鍵值比較。
maps:to_json(Map)->Bin 把映射組轉換成二進制型,包含了JSON表示的該映射組。 maps:from_json(Bin)->Map 把一個包含JSON數據的二進制型轉換成映射組。 maps:safe_from_json(Bin)->Map 把一個包含JSON數據的二進制型轉換成映射組。Bin裏面的任何原子都必須已經存在,不然會拋異常。