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

欢迎!请参阅关于页面以了解有关此内容的一些更多信息。

+3
Clojure
重新标记

clojuredoc 中的 sort 部分说道
comparator 一定要实现 java.util.Comparator。
然而,这似乎不是这种情况。函数作为二元 sort 函数的 1 阶参数提供的可能是显式地返回 truefalse,无需实现 java.util.Comparator

如果 clojuredoc 更新反映这一重要功能将是一件好事。

还有另一个文档https://clojure.org/guides/comparators,其中更详细地解释了这个问题。但在我看来,即使这个文档存在,短的文档仍旧是正确的,即使它是不完整的。

1 答案

+1

没有错误。Clojure函数是java.util.Comparator的实例。Dave在评论中提供的链接提供了更多细节。

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

指南本身确实没有明确提到这个实现细节,但考虑到它明确表示你“可以通过调用任何Clojure函数的compare方法来查看这一点”,我认为这是对这个的另一种解释。

这个特定的细节在https://clojure.org/reference/special_forms#fn,中被明确提到,这一点在`fn`的文档字符串中也提到了。
关于指南中实现细节文本的公平评论。同意文档字符串应该指向指南的目标。

编辑
文档不仅应提供真实信息,还应提供有用信息。读者想知道如何构造一个有效的比较函数。换句话说,它应该是:1)一个二元函数,在给定元素顺序错误时明确返回`false`,在值相等时返回`false`,并且明确返回`true`(不同于任何真值)
否则,2)一个二元函数返回一个负数、零或正整数,以指示其参数的相对顺序。关于边界的更多细节,请参见...
我认为在排序文档字符串中提到`fn`实现了比较器可以解决这个问题。
...