In Elixir, una singola funzione può avere più clausole. Lo si ottiene con il pattern matching degli argomenti della funzione e con l'uso delle guardie.
# 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._, altrimenti il compilatore emette un avviso.fn
13 -> "Awesome, that's my favorite"
_ -> "That's not my favorite"
end
Tieni presente che le funzioni con più clausole non vanno confuse con l'overloading delle funzioni che potresti conoscere da altri linguaggi di programmazione. In Elixir, le funzioni sono identificate solo dal loro nome e dalla loro arietà, non dai tipi degli argomenti (dato che non c'è tipizzazione statica). La funzione number/1 dell'esempio è considerata un'unica funzione indipendentemente da quante clausole ha.