为什么下面的代码没有“匹配错误”?

问题描述 投票:0回答:1

我是Elixir新手,正在官网学习。

为什么输出等于{2,1}?

iex> x = 1
iex> {x, ^x} = {2, 1}
{2, 1} 

当第二个方程中 x 与 2 匹配并且 ^x = 1 不应该被允许时,它不会给出匹配错误吗?

我尝试在网上搜索但没有找到满意的答案。

elixir
1个回答
0
投票

在 Elixir 中,^x 将 x 与其之前绑定的变量匹配。这一行:

{x, ^x} 

表示“匹配一个元组,其中第一个元素可以是任何值并将其分配给 x,第二个元素必须等于 x 的当前值。”

您将 x 绑定到 1,但随后在此语句中将其重新分配为 2:

{x, ^x} = {2, 1}

因为 x 位于括号的左侧,2 也是如此。

然后,使用 pin 运算符(pin 运算符选择 x 的先前值,即 1),对表达式的后半部分进行计算,得出 ^x 为 1。这就是它打印的原因

{2, 1}
© www.soinside.com 2019 - 2024. All rights reserved.