请在 2024 年 Clojure 发展状况调查!分享您的想法。

欢迎!请查看 关于 页面以了解更多有关如何使用本网站的信息。

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 (由 alex+import 报告)
...