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