通常与术语一起使用时,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
。