请在 Clojure 2024 状态调查! 中分享您的想法。

欢迎!请参阅 关于 页面以了解更多关于其工作方式的信息。

0
文档

clojure.core/= 的文档称它在类型无关的方式比较数字。实际上,比较是类型相关的。如果上述陈述为真,那么 (= 1 1.0) 应返回 true,而不是 false;

clojure.core/=
((链接: x) (链接: x y) (链接: x y & 更多))
相等。如果 x 等于 y 则返回 true,如果不等于则返回 false。与
Java x.equals(y) 相同,但它还适用于 nil,并且以类型无关的方式比较
数字和集合。Clojure 的不可变数据结构将 equals()(以及因此 =)定义为值,而不是身份,
比较。

5 个答案

0
评论由:hiredman_ 提供

我认为这比描述的要复杂一些。

= 在 JVM 类型无关的方式比较事物,但它确实使用了人们所说的“相等类别”

(= [1 2] '(1 2))

(= {:a 1} (doto (java.util.HashMap.) (.put :a 1)))

等等。

对于数字,我认为在独立的相等类别中区分浮点数和精确数字是合理的

在这种情况下,1.0 和 1 在不同的相等类别中,所以不相等。
0

评论由:gfredericks 提供

这个文档对于不熟悉这种类型的人是肯定具有误导性的。数字可能是第一个出现在“类型无关的方式”一词中的人。对 {{==}} 函数的简短说明可能是有用的。

0

评论由:bordatoue

我发现==函数令人困惑
例如
(== 1 1.0) => true
(== 1 1.0M) => false ; 这个比较有什么问题?

文档中写道
如果所有数值都有相同值(类型无关)则返回非nil值

0

评论由:alexmiller

@George - 最后一个例子(== 1 1.0M)实际上是已经在1.6中修复的bug,现在会返回true。

0
参考:https://clojure.atlassian.net/browse/CLJ-1333(由ale+import报告)
...