有没有更短的方式来写这个:
case testvalue do
200 ->
true
404 ->
true
_ ->
false
end
对于200或404,它返回true,对于其他一切,它返回false。用OR条件写它会很好,但这会导致错误:
case testvalue do
200 || 400 ->
true
_ ->
false
end
答案 0 :(得分:44)
模式中间没有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
如docs中所述,两者的运行速度同样快in
,内部警卫转换为比较+ or
。
答案 1 :(得分:4)
根据我的经验,在elixir
处理函数/模式匹配的情况更有意义,当代码库增长时,它更具可读性。
我会做那样的事情:
defp valid_http_response?(200), do: true
defp valid_http_response?(400), do: true
defp valid_http_response?(_), do: false
我同意它现在没有意义,但将来你会更开心:)
答案 2 :(得分:3)
对于这个特定情况,或许返回以下内容最好?
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