In Elixir kann eine einzelne Funktion mehrere Klauseln haben. Das erreicht man durch Pattern Matching der Funktionsargumente und durch die Verwendung von 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 aus._ vorangestellt werden; andernfalls gibt der Compiler eine Warnung aus.fn
13 -> "Awesome, that's my favorite"
_ -> "That's not my favorite"
end
Beachte, dass Funktionen mit mehreren Klauseln nicht mit der Funktionsüberladung verwechselt werden sollten, die du vielleicht aus anderen Programmiersprachen kennst. In Elixir werden Funktionen nur anhand ihres Namens und ihrer Stelligkeit identifiziert, nicht anhand der Typen ihrer Argumente (da es keine statische Typisierung gibt). Die Funktion number/1 aus dem Beispiel gilt als eine einzige Funktion, unabhängig davon, wie viele Klauseln sie hat.