1.逗號(,)分隔函數調用,數據構造,和模式中的參數
java
例如:ide
表達式序列就是由一系列逗號分隔的表達式,他們在箭頭以後,隨處可見,以下圖函數start_nano_server()->後面的就是表達式序列,這個表達式序列的值爲seq_loop(listen)執行以後的值。seq_loop(Listen)->以後的一樣是表達式序列,表達式序列在執行的時候,是一個一個來執行的,只要中間有一個失敗,就會在這行報錯,就不會往下接着執行。程序就退出,咱們能夠很清楚的瞭解程序在哪一行出錯。函數
2.分號(;)分隔子句,像函數子句,模式匹配的子句,case表達式裏面的子句,if表達式,try....catch 表達式,receive表達式。oop
個人我的理解是子句就是選擇語句,能夠進行選擇,就是要麼執行這個,要麼執行那個。就是控制流程分支的。spa
2.1函數子句,同一函數的必須具有相同的函數名和相同的參數數量,且必須在同一處定義--不容許在同一函數的兩個子句之間再插入其餘函數定義。code
若是這樣寫,兩個相同名字的handle的函數子句以前用句號。server
會報一下錯誤:ci
他們之間應該用分號(;)it
area({circle,Radius})-> Radius*Radius*math:pi(); area({square,Side})-> Side*Side; area({rectangle,Height,Width})-> Height*Width.
2.2 case表達式裏面的子句(要是Erlang裏面只有函數子句這一種控制流程的方法,你就必須爲程序中的每一個小小的分支都取一個函數名。這樣的作法太麻煩了,因此case也是能夠控制分支的)class
注意:讓最後一個子句不要帶分號(;)
例如
area(Shape)-> case Shape of {circle,Radius}-> Radius*Radius*math:pi(); {square,Side}-> Side*Side; {rectangle,Height,Width}-> Height*Width end.
2.3 if 表達式是case表達式的一種縮略模式,他不針對特定的值作分支判斷也不含模式。
sign(N) when is_number(N)-> if N>0 ->positive; N<0 ->negative; true->zero end.
用case表達式以下:
sign(N) when is_number(N)-> case dummy of _ when N>0 ->positive; _ when N<0 ->negative; _ when true->zero end.
if表達式比較少用,由於Erlang大部分的分支判斷或多或少依賴於模式匹配啊。