2016-08-25 31 views

回答

26

有沒有直接的語法or在圖案的中間,但你可以使用保護:

case testvalue do 
    n when n in [200, 400] -> 
    true 
    _ -> 
    false 
end 

你也可以在警衛中使用or。這也可以工作,但更詳細:

case testvalue do 
    n when n == 200 or n == 400 -> 
    true 
    _ -> 
    false 
end 

雙方將同樣的跑步速度最快in內侍衛被轉換成比較+ or,如docs提及。

1

對於這個特定的情況,或許返回以下是最好的?

testvalue in [200, 400] 

例如:

def test_my_value(testvalue), do: testvalue in [200, 400] 

如預期它將評估到truefalse

另一種可能性是使用cond

cond do 
    testvalue in [200, 400] -> 
    true 
    true -> 
    false 
end 
+0

'cond'用'真的 - > '因爲我需要條件返回true或false,所以並不真正起作用。你如何寫它最後的條件將永遠匹配,因此結果將永遠是錯誤的。 –

+2

在這種情況下,語法看起來有點混亂,但'true - >'基本上與「else」子句等價。請參閱http://elixir-lang.org/getting-started/case-cond-and-if.html#cond因此,上面的代碼會根據情況返回「true」或「false」。 –

4

從我的經驗,它更有意義的elixir處理與功能/模式匹配的情況下,這是當你的代碼庫變得更具有可讀性。

我會做這樣的事情:

defp valid_http_response?(200), do: true 
defp valid_http_response?(400), do: true 
defp valid_http_response?(_), do: false 

我同意它並沒有真正意義了,但將來你會更快樂:)