case是一種控制流程結構,讓我們可以把某個值與許多模式做比較。case運算式中的子句會由上而下依序求值,直到找到相符的模式為止。
在許多情況下,使用case和定義多個函式子句是可以互換的。模式匹配和守衛都可以用在case子句裡。
# one function clause, multiple case clauses
def age_group(age) do
case age do
0 -> ~c"infant"
age when age < 4 -> ~c"baby"
age when age < 13 -> ~c"child"
age when age < 18 -> ~c"teenager"
_ -> ~c"adult"
end
end
# multiple function clauses, no case
def age_group(0), do: ~c"infant"
def age_group(age) when age < 4, do: ~c"baby"
def age_group(age) when age < 13, do: ~c"child"
def age_group(age) when age < 18, do: ~c"teenager"
def age_group(_), do: ~c"adult"
要選用哪一種並沒有嚴格的規則,這取決於個人偏好,通常和當下的情境有關。