এলিক্সির ফাংশন লেখার সময় আমরা প্যাটার্ন ম্যাচিং-এর সাথে অ্যাসার্টিভ স্টাইল অনুসরণ করতে পারি:
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