它是一种小错误还是故意制造的,当我为变量多次分配相同的值时,它不会抛出错误,但是,就像再次分配一样?
以下是一个例子:
X = 1,
X = 100 - 99,
X = 1,
X = list_to_integer("1"),
X = X.
不应该抛出错误吗?抛出一个错误可能意味着代码的某些部分正在尝试重新分配变量,这可能只是一个运气,它与以前一样。
答案 0 :(得分:5)
它实际上不是一个赋值,而是匹配操作(等号实际上是匹配运算符)。见http://erlang.org/doc/reference_manual/patterns.html
实际发生的是你正在尝试"模式匹配"操作员左侧的内容(=)与右侧的内容相对应。
如果左侧有一个变量并且它还没有限制,它将被限制在右侧的值。
另一方面,如果变量已经绑定并且值与运算符右侧的值相同,则没有任何反应,匹配只是成功。
如果值不同,则会出现模式匹配错误。
注意特殊变量" _"当模式匹配任何值时,它将始终成功。
Erlang中的模式匹配非常有用,因为当出现问题时你可以快速失败。例如,在此代码中:
{ok, Value} = some_function()
如果some_function / 0返回类似{error,_}之类的内容,您的代码就会崩溃,并且您无需继续执行无效值的风险。
如果some_function返回预期值,变量Value现在将被绑定到该结果,它就像在一行代码中有一个赋值和一个断言(如果你想以那种方式查看它)
有道理吗?