记录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里面的任何原子都必须已经存在,不然会抛异常。