Clojure中的=和==:

12

我很难理解为什么

(= 1 1.0)

评估为false,而

(== 1 1.0)

评估为true。根据文档==似乎仅适用于数字,但除此之外似乎没有太大区别。那么,我错过了什么?


9
REPL 是你最好的朋友。 (doc =) (doc ==) - Chiron
这在LightTable下返回“nil”,你知道为什么吗? - guiomie
1个回答

21

== 是检查数学等式是否相等的。带有数字的 = 在适用的情况下会检查它们的等同性而不考虑其大小,但在表示上很严格:

user> (= (float 1.0) (double 1.0))
true
user> (= (int 1) (byte 1))
true
user> (= (int 1) (double 1))
false
user> (= 0.5 (/ 1 2))
false
user> (== 0.5 (/ 1 2))
true

据推测,其原因是浮点数的表示可能会失去精度,因此不应视为与整数或精确表示等价。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接