导入
使用匹配运算符的赋值
学习如何在 Elixir 中使用 match 操作符进行赋值。
在大多数编程语言中,= 是赋值操作符。要将值 1 赋给变量 a,根据语言的不同,我们通常写作 a = 1。右侧的值会被赋给左侧的变量。
示例
但在 Elixir 中,= 并不是赋值操作符,而是一个 匹配操作符。我们先通过一个实际例子来详细说明:
1iex> a = 1 21 3iex> a + 3 44
大多数程序员看到这段代码会说:“好的,我们把 1 赋给变量 a,然后把它加 3,所以 a 变成 4。”
但在 Elixir 中,这种理解是错误的。在 Elixir 中,等号并不是赋值操作。相反,它更像是一种断言:只有当 Elixir 找到一种方式使左边等于右边时,这个操作才成功。
...
匹配操作符
在这个例子中,左边是一个变量,右边是一个整数字面量,Elixir 可以通过将变量 a 绑定到值 1 来让匹配成立。我们再深入一步看看:
1iex> a = 1 21
1iex> 1 = a 21
1iex> 2 = a 2** (MatchError) no match of right hand side value: 1
第二条命令 1 = a 也是一个匹配操作,这次成功了。因为变量 a 已经被赋值为 1(由第一条命令设置),所以等号左边和右边的值相同,匹配成功。
但第三条命令 2 = a 会抛出错误。我们可能以为它会把 2 赋给 a,这样就能让匹配成功。但 Elixir 只有在变量位于 = 左侧时才会改变其值。而在右侧,变量会被替换为其当前值。因此这行代码实际上等价于 2 = 1,显然不成立,于是引发错误。
动手试试
请在下面的终端中尝试上述命令。别忘了使用 iex 命令启动 IEx 会话。
Terminal