Amikor Elixir-függvényeket írunk, használhatjuk az asszertív stílust a mintaillesztéssel együtt:
def read_file() do
{:ok, contents} = File.read("hello.txt")
contents
end
A mintaillesztést kifejezetten az illesztő operátor, a =/2 használatával végezzük.
Az illesztés akkor sikeres, ha az operátor bal oldalán álló adat alakja megegyezik a jobb oldaléval.
Ha az illesztés sikeres, a bal oldali változók a jobb oldali értékekhez kötődnek.
Az alulvonás, _, segítségével figyelmen kívül hagyhatjuk az ilyen helyeken lévő értékeket.
{:ok, number, _} = {:ok, 5, [4.5, 6.3]}
number
# => 5 is bound to this variable
A pin operátor ^ segítségével megakadályozhatjuk, hogy egy változó újra kötődjön, és helyette a meglévő értékére illeszthetünk mintát.
number = 10
{:ok, ^number, _} = {:ok, 5, [4.5, 6.3]}
# => ** (MatchError) no match of right hand side value: {:ok, 5, [4.5, 6.3]}
A mintaillesztés függvényklózok fejlécében is előfordulhat, így csak a mintának megfelelő argumentumok hívják meg a függvényt.
A függvényklóz mintaillesztésében változókat is köthetünk.
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