在Erlang中两次分配相同的值

时间:2016-08-10 13:23:10

标签: erlang

它是一种小错误还是故意制造的,当我为变量多次分配相同的值时,它不会抛出错误,但是,就像再次分配一样?

以下是一个例子:

X = 1,
X = 100 - 99,
X = 1,
X = list_to_integer("1"),
X = X.

不应该抛出错误吗?抛出一个错误可能意味着代码的某些部分正在尝试重新分配变量,这可能只是一个运气,它与以前一样。

1 个答案:

答案 0 :(得分:5)

它实际上不是一个赋值,而是匹配操作(等号实际上是匹配运算符)。见http://erlang.org/doc/reference_manual/patterns.html

实际发生的是你正在尝试"模式匹配"操作员左侧的内容(=)与右侧的内容相对应。

如果左侧有一个变量并且它还没有限制,它将被限制在右侧的值。

另一方面,如果变量已经绑定并且值与运算符右侧的值相同,则没有任何反应,匹配只是成功。

如果值不同,则会出现模式匹配错误。

注意特殊变量" _"当模式匹配任何值时,它将始终成功。

Erlang中的模式匹配非常有用,因为当出现问题时你可以快速失败。例如,在此代码中:

{ok, Value} = some_function()

如果some_function / 0返回类似{error,_}之类的内容,您的代码就会崩溃,并且您无需继续执行无效值的风险。

如果some_function返回预期值,变量Value现在将被绑定到该结果,它就像在一行代码中有一个赋值和一个断言(如果你想以那种方式查看它)

有道理吗?