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