当与一般条款一起使用时,在Erlang中==和=:=之间有什么区别?

Ric*_*rdo 19 erlang

除了=:=防止不需要的整数转换的事实:

1> 1=:=1.0.
false
Run Code Online (Sandbox Code Playgroud)

=:=一般使用术语有什么好处?

更好的性能?

Hyn*_*dil 26

最大的优点=:=是它以与模式匹配相同的方式仅对相同的术语返回true.所以你可以确定它们是一样的.11相同的条款和1使用1.0都没有.而已.如果你写函数foo(A, B) when A =:= B -> A.,bar(A, B) when A =:= B -> B.他们会表现相同.如果你使用==它将不会是相同的功能.它只是防止意外.例如,如果您进行一些键/值存储,那么如果您使用键存储值,那么就不正确,1如果请求键,则获取此值1.0.是的,有一点性能损失,==但最不惊讶的更重要.只是使用=:=,=/=当你打算比较相同的术语时.使用==/=仅当您打算比较数字时.

  • 另请注意,`""== [32.0]`评估为"true". (4认同)
  • 所以,最后,这完全是关于比较整数和浮点数,不是吗?如果你有一个包含整数和浮点数的术语,=:= 保证精确的数学。但是除了整数和浮点数之外,== 和 =:= 之间没有更多区别,是吗?我的意思是,对于其他类型,== 同情心是准确的。 (2认同)
  • @Ricardo:是的,不是.它可以看作是用文字来玩,但想象一下这个例子:`A = {foo,[bar,1]},B = {foo,[bar,1.0]},true = A == B,false = A = := B`从技术上讲,`A`和`B`显然不是数字,操作数`==`和`=:=/2`的行为不一样但是你是对的,差异与数字有关.这就是为什么我严格地谈论我的答案中的条款. (2认同)