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

欢迎!有关此如何操作,请参阅关于页面了解更多信息。

0
Java互操作

>函数在0元数上的行为不一致。

`

user> (doc >)

clojure.core/>
([x] [x y] [x y & more])
如果数字按单调递减顺序排列,则返回非nil值,否则返回false。
nil
user> (> 3 2)
true
user> (> 3)
user> (>)
user> (> 3)
user> (>)
ArityException 错误的参数数量传递给:core/> clojure.lang.AFn.throwArity (AFn.java:429)
`

当通过apply使用>时,这很可能是问题所在,其中

`
(或 (= 0 (count l)))

(apply > l))

`

似乎应该更新文档,0元情况下应该返回true,或者1元情况下也应抛出异常。

这也影响了其他比较器。

2 答案

0

_由robert_tweed发表的评论:

根据我对这个问题的原始帖子(在这里:https://groups.google.com/d/msg/clojure/8zkpO9FBN64/u2LAQsR93IgJ),虽然空集是否具有单调顺序在理论上可能有多个答案,但从纯工程实践的角度来看,将其评估为true是最有意义的。

这应该是不会被破坏的变更。因此,将它引入小版本修订应相当安全。这也是一个微不足道的修复。但是,虽然可能性极低,但仍然有可能有人在代码中依赖在运行时抛出异常(就像现在那样)以以某种特殊方式处理空列表。此类代码很糟糕并且应该被重写,因此不应将其视为保留当前行为的理由,这限制了这些函数的普遍适用性,也可能导致现有生产代码中微妙的错误。

但是,这种更改可能不应该回移到现有的1.6.x分支,为了100%的安全,因为它不是安全问题。因此,我的建议是在现有维护分支(任何未来的1.6.x)的文档中添加注释,并在未来版本(1.7+)中评估为真。

0
参考: https://clojure.atlassian.net/browse/CLJ-1526(由 alex+import 报告)
...