2014-01-12 115 views

回答

35

描述讓我把if俱樂部了。您使用if有一個條件和可能的else,就是這樣。當您有多個條件並且if語句不夠用時,可以使用cond語句,但最後,當您想要對某些數據進行模式匹配時使用case語句。

讓我們通過實例說明:假設你想如果今天是下雨或米飯,如果不吃蘋果,那麼你可以使用:

if weather == :raining do 
    IO.puts "I'm eating apple" 
else 
    IO.puts "I'm eating rice" 
end 

這是一個有限的世界,所以要擴大您的選項,因爲你會吃不同的東西在一定的條件,所以cond說法是,像這樣:

cond do 
    weather == :raining and not is_weekend -> 
    IO.puts "I'm eating apple" 
    weather == :raining and is_weekend -> 
    IO.puts "I'm will eat 2 apples!" 
    weather == :sunny -> 
    IO.puts "I'm happy!" 
    weather != :raining and is_sunday -> 
    IO.puts "I'm eating rice" 
    true -> 
    IO.puts "I don't know what I'll eat" 
end 

最後true應該在那裏,否則會引發異常。

那麼case呢?它用於模式匹配的東西。讓我們假設你收到有關天氣和星期幾作爲一個元組的消息的信息,您取決於作出決定,你可以寫你的意圖是:

case { weather, weekday } do 
    { :raining, :weekend } -> 
    IO.puts "I'm will eat 2 apples!" 

    { :raining, _ } -> 
    IO.puts "I'm eating apple" 

    { :sunny, _ } -> 
    IO.puts "I'm happy!" 

    { _, :sunday } -> 
    IO.puts "I'm eating rice" 

    { _, _ } -> 
    IO.puts "I don't know what I'll eat" 
end 

所以case給您帶來的數據的模式匹配方法,您沒有使用ifcond

14

我的答案很簡單:

  • cond不接收參數,它可以讓你在每個分支使用不同的條件。
  • case收到一個參數,並且每個分支都是模式匹配反對論點。