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,Expr1 orelse Expr2 前为真则不判断后,前为假判断后;Expr1 andalso Expr2 前为真判断后,前为假不判断后;Expr1 or Expr2和Expr1 and Expr2无论前是真是假都判断后

3,case of:表达式计算出来后从上到下进行模式匹配,如果匹配到某一个则计算它的表达式然后退出,相当于c中的switch break这类的,如果一个都没匹配上则产生异常,所以最后一个会用一个 _ 之类的来绝对匹配避免异常。
   if
Guard1 ->
Expr_seq1;
Guard2 ->
Expr_seq2;
...
end 这个跟case of的基本上一样区别在于Guard1 属于非真即假的判断,而case of 则是一般的erlang term,最后一个Guard一般直接写true也是为了避免异常

4,pro erlang 上说不论是系统还是非系统进程接收到kill信号都会死掉并发送killed给自己的link set,自己试验了一下发现系统进程只有接收到同样是系统进程的kill信号才会有如上的表现,非系统发送的kill他会接收并{'EXIT',PID,kill}并进行想要的处理,当然所有以上前提是他们都是link着的。如果a和b没有link关系且都是系统进程那么在b中exit(a,kill)会把a给干掉,其实有点不解没有link的两个进程不应该有这种关系。

猜你喜欢

转载自jias.iteye.com/blog/556034