عند كتابة دوال 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