模式匹配是 Elixir 很強(qiáng)大的特性坐榆,它允許我們匹配簡單值席镀、數(shù)據(jù)結(jié)構(gòu)、甚至函數(shù)屎篱。
匹配操作符
Elixir 中交播, =
操作符就是我們的匹配操作符秦士。通過這個匹配操作符伍宦,我們可以賦值和匹配。
iex> x = 1
1
現(xiàn)在做一些簡單的匹配
iex> 1 = x
1
iex> 2 = x
** (MatchError) no match of right hand side value: 1
# Lists
iex> list = [1, 2, 3]
iex> [1, 2, 3] = list
[1, 2, 3]
iex> [] = list
** (MatchError) no match of right hand side value: [1, 2, 3]
iex> [1 | tail] = list
[1, 2, 3]
iex> tail
[2, 3]
iex> [2|_] = list
** (MatchError) no match of right hand side value: [1, 2, 3]
# Tuples
iex> {:ok, value} = {:ok, "Successful!"}
{:ok, "Successful!"}
iex> value
"Successful!"
iex> {:ok, value} = {:error}
** (MatchError) no match of right hand side value: {:error}
Pin 操作符
當(dāng)匹配的左邊包含變量的時候,匹配操作符同時會做賦值操作揖曾。有些時候炭剪,這種行為并不是預(yù)期的奴拦,這種情況下错妖,我們可以使用 ^
操作符亮蛔。
iex> x = 1
1
iex> ^x = 2
** (MatchError) no match of right hand side value: 2
iex> {x, ^x} = {2, 1}
{2, 1}
iex> x
2