Erlang学习总结之Erlang语法中的逗号(,)、分号(;),句号(.)的正确用法

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

相关文章
相关标签/搜索