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

相關文章
相關標籤/搜索