Пишучи функції Elixir, ми можемо скористатися стверджувальним стилем разом із зіставленням зі зразком:
def read_file() do
{:ok, contents} = File.read("hello.txt")
contents
end
Зіставлення зі зразком виконується явно за допомогою оператора зіставлення =/2.
Зіставлення вдається, коли форма даних ліворуч від оператора збігається з правою частиною.
Коли зіставлення вдається, змінні ліворуч привʼязуються до значень праворуч.
Використання символа підкреслення, _, дозволяє нам ігнорувати значення на цих місцях.
{:ok, number, _} = {:ok, 5, [4.5, 6.3]}
number
# => 5 is bound to this variable
Оператор закріплення ^ можна використати, щоб запобігти повторному привʼязуванню змінної й натомість зіставити її з наявним значенням.
number = 10
{:ok, ^number, _} = {:ok, 5, [4.5, 6.3]}
# => ** (MatchError) no match of right hand side value: {:ok, 5, [4.5, 6.3]}
Зіставлення зі зразком може також відбуватися в заголовку виразу функції, тож функцію буде викликано лише для тих аргументів, що відповідають зразку.
Змінні можна привʼязувати в зіставленні зі зразком у виразі функції.
defmodule Example do
def named_function(:a = atom_variable) do
{atom_variable, 1}
end
end
Example.named_function(:a)
# => {:a, 1}
# The first function clause matches, so it is invoked
Example.named_function(:b)
# => ** (FunctionClauseError) no function clause matching in Example.named_function/1