W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
匹配操作符不止能用來匹配簡(jiǎn)單的值,還可以用于解構(gòu)復(fù)雜的數(shù)據(jù)類型。例如,我們可以對(duì)元組進(jìn)行模式匹配:
iex> {a, b, c} = {:hello, "world", 42}
{:hello, "world", 42}
iex> a
:hello
iex> b
"world"
當(dāng)兩邊不匹配時(shí)會(huì)出現(xiàn)錯(cuò)誤。例如,元組的大小不同:
iex> {a, b, c} = {:hello, "world"}
** (MatchError) no match of right hand side value: {:hello, "world"}
或者類型不匹配:
iex> {a, b, c} = [:hello, "world", 42]
** (MatchError) no match of right hand side value: [:hello, "world", 42]
有趣的是,我們可以匹配特殊的值。比如下面的例子,當(dāng)右邊是一個(gè)以開頭的元組時(shí)才能匹配:?:ok
?
iex> {:ok, result} = {:ok, 13}
{:ok, 13}
iex> result
13
iex> {:ok, result} = {:error, :oops}
** (MatchError) no match of right hand side value: {:error, :oops}
我們可以對(duì)列表進(jìn)行模式匹配:
iex> [a, b, c] = [1, 2, 3]
[1, 2, 3]
iex> a
1
列表支持匹配它的頭尾:
iex> [head | tail] = [1, 2, 3]
[1, 2, 3]
iex> head
1
iex> tail
[2, 3]
與函數(shù)和類似,我們不能夠匹配空列表的頭尾:?hd/1
??tl/1
?
iex> [h | t] = []
** (MatchError) no match of right hand side value: []
?[head | tail]
?格式不僅用于模式匹配,還可用于往列表前添加元素:
iex> list = [1, 2, 3]
[1, 2, 3]
iex> [0 | list]
[0, 1, 2, 3]
模式匹配使得開發(fā)者能夠簡(jiǎn)單地解構(gòu)例如元組和列表的數(shù)據(jù)類型。在之后的章節(jié)中我們將看到這是Elixir中遞歸的基礎(chǔ),且其適用于其它類型,例如映射與二進(jìn)制。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: