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

欢迎!请参阅关于页面以获取更多关于如何使用本站的信息。

+3
Clojure
重新标记

The clojuredoc for sort says
comparator MUSS extens java.util.Comparator.
然而,这并不像看起来那样。传递给 2-ary sort 函数的作为 1nd 参数的函数可以显式返回 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` 的文档字符串中提到的。
关于指南中的实现细节文本,这是一个很好的论点。我同意文档字符串应指向指南的可能性。

编辑
似乎文档应该不仅提供真实信息,还要提供有用信息。读者想知道如何构造一个有效的比较函数。即,它应该 either 1) 一个返回显式 `false` 如果两个给定元素顺序错误,值相等时返回 `false`,并且显式返回 `true`(与任何其他 truthy 值区分开来)的二进制函数
否则 2) 一个返回负数、零或正整数来指示其参数相对顺序的二进制函数。有关边缘情况的更多细节,请参阅...
我认为在排序文档字符串中提到fn实现了Comparator将解决这个问题。
...