Elixirでは、1つの関数に複数の節を持たせることができます。これは、関数の入力をパターンマッチングしたり、ガードを使ったりすることで実現します。
# 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は、いくつの節を持っていても、1つの関数として扱われます。