erlang 读书笔记
1,进程字典
所谓进程字典他的作用域是他所在的process,如果在主线程put(name,"jias"),那么在该线程spawn出来的子线程里面用get(name)将会得到undefined。
put(key,value):如果是第一次给这个key关联值,返回undefined,否则返回前一次被关联的值;
get()和get(key)。前一个返回一个[{key,value}],后一个如果有value和key关联返回value否则返回undefined;
erase(),erase(key)。前一个擦除所有,后一个擦除和key有关的{key,value}。
get_keys(value)。返回关联value的所有key。
2,Expr1orelseExpr2前为真则不判断后,前为假判断后;Expr1andalsoExpr2前为真判断后,前为假不判断后;Expr1orExpr2和Expr1andExpr2无论前是真是假都判断后
3,caseof:表达式计算出来后从上到下进行模式匹配,如果匹配到某一个则计算它的表达式然后退出,相当于c中的switchbreak这类的,如果一个都没匹配上则产生异常,所以最后一个会用一个_之类的来绝对匹配避免异常。
if
Guard1->
Expr_seq1;
Guard2->
Expr_seq2;
...
end这个跟caseof的基本上一样区别在于Guard1属于非真即假的判断,而caseof则是一般的erlangterm,最后一个Guard一般直接写true也是为了避免异常
4,proerlang上说不论是系统还是非系统进程接收到kill信号都会死掉并发送killed给自己的linkset,自己试验了一下发现系统进程只有接收到同样是系统进程的kill信号才会有如上的表现,非系统发送的kill他会接收并{'EXIT',PID,kill}并进行想要的处理,当然所有以上前提是他们都是link着的。如果a和b没有link关系且都是系统进程那么在b中exit(a,kill)会把a给干掉,其实有点不解没有link的两个进程不应该有这种关系。