欢迎!请参阅关于页面,以了解更多有关此功能的信息。
{{sort}}的文档似乎不完整
在某种情况下,{{sort}}可以返回{{nil}}。关于更多背景信息,请参考CTYP-228中的讨论。这里有一个重放案例:http://sprunge.us/VIFc?clj,由Nicola Mometto提供。文档字符串声明sort"返回coll中项的排序序列",但没有指示sort可以返回{{nil}}。
声明说"比较器必须实现java.util.Comparator",但这并不正确 - 比较器可以是任何可以接受2个参数并返回布尔值或数字的IFn。
对于第一个问题(返回nil),将实现更改为永远不返回nil可能是最好的解决方案。对于第二个问题,文档字符串可以引用有效比较函数的描述,这些函数可以被其他接受比较器的函数引用(例如,{{sort-by}}, {{sorted-set-by}}, {{sorted-map-by}})。
评论者为:alexmiller
第一个问题已在CLJ-1763中解决,因此我会从工单中删除它。
第二个问题是技术上正确的 - Arrays.sort()将调用,并需要一个比较器。棘手的是AFn基类实现了Comparator,因此所有从它扩展并支持2参数函数的实现都满足此约束。但是,可能需要更好地强调这一点。
评论者为:marc
我认为这里的一个干净的修复方案就是直接声明 sort 函数接受一个比较函数,用户可以参考参考手册里的比较函数详细信息。我没有在参考手册里找到任何相关内容,但 Clojure 指南有对比较函数的良好描述 - https://clojure.org/guides/comparators。我正在考虑为参考手册写一个关于比较函数的小条目,你觉得怎么样?
这个问题应该被重写以删除第一个问题。对于第二个问题,我认为添加一个条款或句子来描述比较函数可以是一个 2 参数函数,它返回布尔值或数字是合适的。
如果您想更新网站,应在 https://github.com/clojure/clojure-site 上的 issue 或 PR 中进行。