列表上的模式匹配

你還可以在 Elixir 資料結構(例如列表)上進行模式匹配。

清單

匹配列表非常簡單。

[head | tail] = [1,2,3,4,5]
# head == 1
# tail == [2,3,4,5]

這通過將列表中的第一個(或更多)元素與|(管道)的左側和列表的其餘部分匹配到|的右側變數來工作。

我們還可以匹配列表的特定值:

[1,2 | tail] = [1,2,3,4,5]
# tail = [3,4,5]

[4 | tail] = [1,2,3,4,5]
** (MatchError) no match of right hand side value: [1, 2, 3, 4, 5]

還允許繫結|左側的多個連續值:

[a, b | tail] = [1,2,3,4,5]
# a == 1
# b == 2
# tail = [3,4,5]

更復雜 - 我們可以匹配特定值,並將其與變數匹配:

iex(11)> [a = 1 | tail] = [1,2,3,4,5]
# a == 1