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"
在两者之间做选择并没有严格的规定。这属于个人偏好,通常取决于具体情境。