2010-11-10 80 views
4

我今天早上開始嘗試計算erlang中'when'語句的用法。我知道下面的例子是錯誤的:`當'erlang中的保留字

do_larger() -> 
    io:format("Larger~n"). 

do_smaller() -> 
    io:format("Smaller~n"). 


when_version(Size) -> 
    when Size > 10 -> do_larger(), 
    when Size < 10 -> do_smaller(). 

我決定看看它在Haskell的實現,看看這是否會幫助我最終得到更加混亂。

是否有人能夠指出我的教程(或向我解釋)when語句的用法以及它在haskell和/或erlang中的用法?

+0

我不太瞭解Haskell,但是當Haskell和Erlang與我在Haskell中看到的答案完全不同時。 – 2010-11-10 11:04:18

+2

我刪除了Haskell標籤,因爲這與Haskell無關。你可以用幾乎任何語言編寫一個名爲「when」的函數。 – jrockway 2010-11-10 15:27:09

+0

可能要考慮將問題重命名爲「當Erlang中的保留字」或「Erlang中的when關鍵字」時。 Erlang沒有聲明。 #Pedantic – 2016-03-01 05:20:25

回答

16

在erlang的時候是一個子句的守衛。這涉及到erlang中內置的模式匹配。你的榜樣必須是:

when_version(Size) when Size > 10 -> 
    do_larger(); 
when_version(Size) when Size < 10 -> 
    do_smaller(). 

Guard SequencesFunction Declaration Syntax的參考。

對於一個教程閱讀Guards, Guards!Learn You Some Erlang for Great Good這是一個很好的在線Erlang教程BTW。

+3

警衛也可以用於案件和接收陳述。 – Zed 2010-11-10 11:35:16

+0

當在功能中作爲守衛或用例時使用。 – 2010-11-15 15:41:13