2012-03-20 98 views

回答

21

=:=的最大优点是它仅以与模式匹配相同的方式对同样的术语返回true。所以你可以肯定他们是一样的。 11是相同的术语,11.0不是。而已。如果您编写像foo(A, B) when A =:= B -> A.bar(A, B) when A =:= B -> B.这样的功能,它们将表现相同。如果您使用==它不会是相同的功能。它只是防止惊喜。例如,如果您创建了一些键/值存储空间,那么如果您使用密钥1存储值,并且如果要求输入密钥1.0则会得到该值。是的,==有一点点性能损失,但最不重要的是惊讶。如果您打算比较相同的术语,只需使用=:==/=。仅当您打算比较数字时才使用==/=

+1

因此,最后,它是关于与浮点数进行比较,不是吗?如果你有一个带有整数和浮点数的术语,=:=保证精确的数学。但除了整数和浮点数之外,==和=:=之间没有任何区别,是?我的意思是,与其他类型==同情是确切的。 – Ricardo 2012-03-21 12:43:04

+0

@Ricardo:这是正确的。 – Fylke 2012-05-07 05:25:59

+2

@Ricardo:是的,没有。它可以被看作是玩这个词,但想象这个例子:'A = {foo,[bar,1]},B = {foo,[bar,1.0]},true = A == B,false = A = := B'所以从技术上讲,'A'和'B'并不明显,操作数'=='和'=:=/2'的行为不一样,但你说得对,差异就是数字。这就是为什么我严格讲我的答案中的术语。 – 2012-05-11 09:18:08

0

Eshell V5.9.3.1(用^ G中止)
1> 1.0 == 1。
true
2> 1.0 =:= 1。

3>

看到了吗? 时去“==”将转院两个元素插入相同的格式相匹配。 当“=:=”不,当两个元素是相同类型和相同值将返回true。

相关问题