有没有更短的写法:
case testvalue do
200 ->
true
404 ->
true
_ ->
false
end
对于 200 或 404,它返回 true,对于其他所有值,返回 false。最好用 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
,如文档中所述。
根据我的经验,
elixir
处理具有函数/模式匹配的情况更有意义,当您的代码库增长时,它的可读性更强。
我会做类似的事情:
defp valid_http_response?(200), do: true
defp valid_http_response?(400), do: true
defp valid_http_response?(_), do: false
我同意现在确实没有意义,但将来你会更快乐:)
对于这种具体情况,也许返回以下内容是最好的?
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