通常与术语一起使用时,Erlang中==和=:=之间的区别是什么?

通常与术语一起使用时,Erlang中==和=:=之间的区别是什么?,erlang,Erlang,除了=:=防止不必要的整数强制转换之外: 1> 1=:=1.0. false 一般来说,将=:=与术语一起使用有什么好处 更好的性能?使用=:=的最大优点是,它仅以与模式匹配相同的方式为相同的术语返回true。所以你可以确定他们是一样的1和1是相同的术语,而1和1.0是不同的术语。就这样。如果在A=:=B->A.时编写函数,如foo(A,B)和bar(A,B),在A=:=B->B.时,它们的行为将相同。如果您使用==,则功能将不同。它只是防止意外。例如,如果使用键1存储值,然后在请求键1

除了
=:=
防止不必要的整数强制转换之外:

1> 1=:=1.0.
false
一般来说,将
=:=
与术语一起使用有什么好处


更好的性能?

使用
=:=
的最大优点是,它仅以与模式匹配相同的方式为相同的术语返回true。所以你可以确定他们是一样的
1和
1是相同的术语,而
1和
1.0是不同的术语。就这样。如果在A=:=B->A.时编写函数,如
foo(A,B)和
bar(A,B),在A=:=B->B.时,它们的行为将相同。如果您使用
==
,则功能将不同。它只是防止意外。例如,如果使用键
1
存储值,然后在请求键
1.0
时获取该值,则进行一些键/值存储是不正确的。是的,
=
会有一点性能损失,但最不令人惊讶的是更重要的。当您想要比较相同的术语时,只需使用
=:=
=/=
。仅当您打算比较数字时,才使用
=
/=

*Eshell V5.9.3.1  (abort with ^G)   
1> 1.0==1.   
true   
2> 1.0=:=1.  
false  
当我们使用
==
时,它会将两个元素转换为相同的格式以匹配。
使用
=:=
时,不会发生这种情况–当两个元素的类型和值相同时,它将返回
true

,因此,最后,它是关于比较整数和浮点,不是吗?如果有一个包含int和float的项,=:=保证精确的数学运算。但是除了int和float之外,==和=:=之间没有任何区别,是吗?我的意思是,对于其他类型的人来说,==同情是完全正确的。@Ricardo:是和否。它可以被看作是在玩弄文字,但想象一下这个例子:
A={foo,[bar,1]},B={foo,[bar,1.0]},true=A==B,false=A=:=B
所以从技术上讲,
A
B
显然不是数字,操作数
==
==:=/2
的行为不一样,但您是对的,数字的区别就变成了。这就是为什么我在回答中严格地谈论术语。@Hynek Pichi Vychodil:谢谢你的夸奖!还请注意,由于Erlang中的字符串存储为整数列表,因此计算为
true的
==[32.0]
也计算为
true