2014-01-14 82 views
1

我在想,erlang的if語句和返回值背後的想法(在這種情況下是true-> true)。這是我的代碼片段Erlang if語句並返回true

if 
(Velocity > 40) -> io:format(" processing fast !~n") ; 
true -> true 
end, 

我知道Erlang不允許你有一個如果沒有一個真正的語句選項。但即使我可以使用true-> false,但對最終輸出無關緊要。

其實在if子句和返回值背後有什麼想法。

+2

實際上,如果您的if中有「true」,會讓您感到沮喪,因爲這表明您在檢查條件時未涵蓋所有可能性。如果你檢查所有可能的條件,真實的陳述不是必需的,也不是強制性的。 – 3yakuya

+0

感謝白宮。 –

回答

6

Erlang's if是布爾表達式的簡單模式匹配並返回結果。

這真的只是需要匹配的東西,你不需要「真 - >真」在所有

例如情況: - 情況

if 
(Velocity > 40) -> io:format(" processing fast !~n") ; 
(Velocity < 40) -> io:format(" processing slow !~n") ; 
(Velocity == 40) -> io:format(" processing eh !~n") 
end, 

沒有「>真正的」 ,但也不可能與其中一種模式不匹配。

這樣做的原因是,「如果」也 這樣,你可以這樣做一個表達式(如在二郎一切):

X = if 
    (Vel > 40) -> 10; 
    (Vel < 40) -> 5 
    end, 

如果VEL == 40,什麼是價值X?這將是未定義的,所以erlang要求你總是有一個匹配。

,當你不希望指定一個詳盡的比賽中常見的就是用真實的,如:

X = if 
    (Vel > 40) -> 10; 
    (Vel < 40) -> 5; 
    true -> 0 
    end, 

在最後一種情況下,X始終有一個值(10,5或0)

有意義嗎?

0

在Erlang中,一切都是一個返回值的表達式。您不需要true -> true語句,但是,如果您沒有包含它並且沒有匹配,則會引發錯誤,因爲解釋程序無法確定表達式的返回值。

這是該語言的一項功能。