Em Elixir, uma única função pode ter várias cláusulas. Isto consegue-se através da correspondência de padrões com os argumentos da função e do uso de guards.
# pattern matching the argument
def number(7) do
"Awesome, that's my favorite"
end
# using a guard
def number(n) when is_integer(n) do
"That's not my favorite"
end
def number(_n) do
"That's not even a number!"
end
FunctionClauseError._, caso contrário o compilador emite um aviso.fn
13 -> "Awesome, that's my favorite"
_ -> "That's not my favorite"
end
Repara que as funções com múltiplas cláusulas não devem ser confundidas com a sobrecarga de funções que possas conhecer de outras linguagens de programação. Em Elixir, as funções são identificadas apenas pelo nome e pela aridade, não pelos tipos dos argumentos (uma vez que não há tipagem estática). A função number/1 do exemplo é considerada uma única função, independentemente do número de cláusulas que tenha.