【发布时间】:2012-04-05 03:46:04
【问题描述】:
除了=:= 可以防止不需要的整数转换之外:
1> 1=:=1.0.
false
将=:= 与一般术语一起使用有什么好处?
性能更好?
【问题讨论】:
标签: erlang
除了=:= 可以防止不需要的整数转换之外:
1> 1=:=1.0.
false
将=:= 与一般术语一起使用有什么好处?
性能更好?
【问题讨论】:
标签: erlang
=:= 的最大优点是它只对相同的术语以与模式匹配相同的方式返回 true。所以你可以确定它们是一样的。 1 和 1 是相同的术语,1 和 1.0 不是。而已。如果您编写像 foo(A, B) when A =:= B -> A. 和 bar(A, B) when A =:= B -> B. 这样的函数,它们的行为将相同。如果您使用==,它的功能将不同。它只是防止意外。例如,如果您进行一些键/值存储,那么如果您使用键 1 存储值,然后在请求键 1.0 时获取此值,则将是不正确的。是的,== 有一点性能损失,但最不惊讶更重要。当您打算比较相同的术语时,只需使用=:= 和=/=。仅当您打算比较数字时才使用 == 和 /=。
【讨论】:
A = {foo, [bar,1]}, B = {foo, [bar, 1.0]}, true = A == B, false = A=:=B 所以从技术上讲A 和B 显然不是数字,操作数== 和=:=/2 的行为不一样但是你是对的,区别变成数字。这就是为什么我在我的回答中严格谈论术语。
" "==[32.0] 评估为 true。
" " =:= [32] 的计算结果也为 true,因为 Erlang 中的字符串存储为整数列表。
*Eshell V5.9.3.1 (abort with ^G)
1> 1.0==1.
true
2> 1.0=:=1.
false
当我们使用== 时,它会将两个元素转换为相同的格式以进行匹配。
对于=:=,它不会发生——当两个元素是相同类型和相同值时,它将返回true。
【讨论】: