1、erl -detached
文档中说明daemons 和后台程序时适用,需要在代码中动态拉起node时同样适用,否则会收到terminate erlang 的问题
2 init stop
可以终止VM,结合rpc:call可结束指定node
3 代码中控制common test
ct:install 指定config文件,ct:start_interactive(),这个很重要,指定交互模式
4 and/not
要把左右两边的比较运算符用()括起来
5 wxwidget
Erlang移植的GUI 库,可以参考 wxwidget官方文档
6 $ 取ascii
指定char的ascii值,如 $0 为48,在处理 binary时非常有用
7[H|T]的tip
[H|T]=List常用用法,还可以这样[Key1,_,Key2|T]=List,匹配处符合条件的数据
8 debugger调试gen_server:call
使用gen_server:call/3,timeout可以使用infinity,默认是5s,基本不够调试
9 debugger 关联其他node
当VM为daemon时,无法再命令行启动debugger,可以采用rpc:call(Node,debugger,start,[])启动,提示at Node@Host
10 获取gen_server/gen_fsm等OTP process的state
sys:get_status/1,2,适用于所有OTP的process和基于proc_lib和sys的process
11 如何设置timer
使用erlang:send_after/3和erlang:start_timer/3而不是timer这个module,timer使用独立的process来管理timer,如果很多的process频繁建立/取消timer可能导致overload
12尾递归
在尾递归不需要反转的情况效率高于普通递归,其他情况不一定
13 atom, ets 没有自动garbage collection
需要考虑如何避免没有意义的atom和ets. ets可以显示指定delete
14 binary <<>>格式
=和<<>>需要用空格分开
15 <<X:7/binary,Y:1/binary>> 无效
在包含binary的pattern match中必须保证为8的倍数,否则无法解析
16 gen_server:call 远程调用
ServerRef = Name | {Name,Node} | {global,GlobalName} | {via,Module,ViaName} | pid()
如果需要调用其它node的gen_server发消息,之前以为需要用rpc调用远端gen_server:call,仔细研究函数说明,发现本身支持 {Name,Node}和{global,GlobalName}这两种形式,很方便使用
17 gen_tcp收到的消息格式
{tcp, Socket, Data}
{tcp_closed, Socket}{tcp_error, Socket, Reason}