有沒有寫這個更短的方式:Elixir:如何在case條件下測試多個值?
case testvalue do
200 ->
true
404 ->
true
_ ->
false
end
它返回200或404真假的一切。這將是很好把它與OR條件寫,但是這將導致一個錯誤:
case testvalue do
200 || 400 ->
true
_ ->
false
end
有沒有寫這個更短的方式:Elixir:如何在case條件下測試多個值?
case testvalue do
200 ->
true
404 ->
true
_ ->
false
end
它返回200或404真假的一切。這將是很好把它與OR條件寫,但是這將導致一個錯誤:
case testvalue do
200 || 400 ->
true
_ ->
false
end
有沒有直接的語法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提及。
對於這個特定的情況,或許返回以下是最好的?
testvalue in [200, 400]
例如:
def test_my_value(testvalue), do: testvalue in [200, 400]
如預期它將評估到true
或false
。
另一種可能性是使用cond
:
cond do
testvalue in [200, 400] ->
true
true ->
false
end
從我的經驗,它更有意義的elixir
處理與功能/模式匹配的情況下,這是當你的代碼庫變得更具有可讀性。
我會做這樣的事情:
defp valid_http_response?(200), do: true
defp valid_http_response?(400), do: true
defp valid_http_response?(_), do: false
我同意它並沒有真正意義了,但將來你會更快樂:)
'cond'用'真的 - > '因爲我需要條件返回true或false,所以並不真正起作用。你如何寫它最後的條件將永遠匹配,因此結果將永遠是錯誤的。 –
在這種情況下,語法看起來有點混亂,但'true - >'基本上與「else」子句等價。請參閱http://elixir-lang.org/getting-started/case-cond-and-if.html#cond因此,上面的代碼會根據情況返回「true」或「false」。 –