(1)
删除进程字典中x键的值 erlang:put(x,undefined). 就是把值改为undefined就Ok.
(2)
ets:match 匹配记录的时候,_='_' 可以代表任意多的键值对,匹配非记录的时候 '_' 只能代表一个term.
(3)
类似 lists:map/lists:foreach/lists:splitwith 调用的fun里面,不能进行when 断言,单独的fun里面也不能
(4)
1 test24() -> 2 A = #ets_base{id=1,ic=1,ib=3,ia=4}, 3 A1 = #ets_base{id=2,ic=2,ib=4,ia=5}, 4 A2 = #ets_base{id=3,ic=4,ib=5,ia=6}, 5 get_min_key(1,[A,A1,A2]). 6 7 8 get_min_key(N,Info) -> 9 case lists:keyfind(N,#ets_base.ic,Info) of 10 false -> 11 N; 12 _ -> 13 get_min_key(N+1,Info) 14 end; 15 get_min_key(N,Info) when N =:= 2 -> 16 [].
erlang查找是按顺序的,上面的2个get_min_key 反过来的话结果就不一样了。
(6)
要非常注意同步问题,gen_server的state、ets表、进程字典、数据库的同步问题。
(7)
注意使用赋值匹配。
(8)
行为进程模块执行到 terminate 的时候不可以再调用相应的进程cast/call等,这个时候已经不响应这些调用了