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

欢迎!请参阅 关于 页面以了解更多有关此功能的信息。

+3
Clojure
重新标记

clojuredoc 中关于 sort 的说明
比较器必须实现 java.util.Comparator。
然而,似乎并非如此。作为 2 参数 sort 的第一个参数提供的函数可以明确返回 truefalse,无需实现 java.util.Comparator

如果 clojuredoc 能够更新以反映这个重要的特性将会很好。

另一个文档 https://clojure.org/guides/comparators 更详细地解释了这一点。但是,在个人观点中,那个文档的存在并不能免除简短文档的不完整。

1 答案

+1

这是正确的。Clojure函数是java.util.Comparator的实例。Dave在评论中提供的链接提供了更多详细信息。

即使如此,这似乎可以进行改进?文档字符串并没有指向该指南。该指南本身也没有提到所有Clojure函数都实现了自己的compare。
我同意`sort`和`sort-by`的文档字符串应该指向指南。

该指南本身确实没有明确提及此实现细节,但鉴于它明确表示你可以通过调用任何Clojure函数的比较方法来“看到这一点”,我不认为可以有任何其他解释。

这个特定的细节在https://clojure.org/reference/special_forms#fn,中被明确提到,这是`fn`文档字符串中提到的。
关于指南中实现细节文本的意见很公正。我同意文档字符串应该指向指南的目标。

编辑
似乎文档应该不仅提供真实信息,还应提供有用信息。 读者想知道如何构建一个有效的比较函数。 也就是说,它应该要么是 1) 一个二元函数,如果两个给定元素顺序错误则显式返回 `false`,如果值相等则返回 `false`,并显式返回 `true`(而不是任何真值)
否则或 2) 一个二元函数,返回一个负数、零或正整数,表示其参数的相对顺序。 有关角情况的更多详细信息,请参见……
我认为在排序列表的说明字符串中提到 fn 实现了 Comparator 可以解决这个问题。
...