列表上的模式匹配

你还可以在 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