در 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 از مثال بالا، صرفنظر از تعداد بندهایش، یک تابع واحد به حساب میآید.