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大部分的分支判断或多或少依赖于模式匹配啊。