在 Elixir 中,一個函式可以有多個子句。做法是對函式的引數進行模式匹配,並使用守衛。
# 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。_,否則編譯器會發出警告。fn
13 -> "Awesome, that's my favorite"
_ -> "That's not my favorite"
end
請注意,多個子句的函式不應該和你在其他程式語言裡認識的函式多載混為一談。在 Elixir 中,函式只以名稱和元數來識別,而不是引數的型別(因為沒有靜態型別)。範例中的number/1被視為單一函式,不論它有多少個子句。