欢迎!请参阅 关于 页面以获取更多关于如何使用本站的信息。
{{sort}} 的文档似乎不完整
{{sort}} 在某些情况下可能返回 {{nil}}。在 CTYP-228 中有一段关于背景的讨论。这里有由 Nicola Mometto 提供的复现代码示例: http://sprunge.us/VIFc?clj。文档字符串指出 sort "返回 coll 中元素的排序序列",但没有表明 sort 可能返回 {{nil}}。
声明 "比较器必须实现 java.util.Comparator",但这是不正确的 - 比较器可以是任何可以接受两个参数并返回布尔值或数字的 IFn。
对于第一个问题(nil 返回),将实现更改为从不返回 nil 可能是最佳的修复方法。对于第二个问题,文档字符串可以引用关于有效比较函数的描述,这些函数可以被其他也接受比较器的函数引用(例如,{{sort-by}}, {{sorted-set-by}}, {{sorted-map-by}})。
评论由:alexmiller 添加
第一个问题已在 CLJ-1763 中处理,因此我会从工单中删除。
第二个在技术上是真的 - Arrays.sort() 会调用,并且它需要一个 Comparator。难点在于 AFn 基类实现了 Comparator,所以所有扩展自它的函数实现,如果它们支持接受两个参数的函数,就满足这个约束。但可能最好更明确地指出这一点。
评论由:marc 添加
我在想,这里的一个巧妙修复可能是只是陈述sort函数需要一个比较器函数,并让用户查阅参考手册以了解比较器函数的详细情况。在参考手册中我没有找到任何内容,但Clojure指南中对比较器的描述很好 - https://clojure.org/guides/comparators。我打算为参考手册编写一个小词条以记录比较器 - 这个想法如何?
这个问题应该被重写以去除第一个问题。第二个问题,我认为可以添加一个条款或句子来说明比较器可以是一个返回布尔值或数字的2参数函数。
如果你想更新网站,你应该在https://github.com/clojure/clojure-site上将其作为一个问题或PR来处理。