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 错误的参数数量(0)传递给:core/> clojure.lang.AFn.throwArity (AFn.java:429)
`

当通过apply使用>时,这可能会导致问题

`
要么(= 0 (count l))

(apply > l))

`

似乎应该更新文档,0-arg情况应返回true,或者1-arg情况也应该引发异常。

这也影响其他比较器。

2 个答案

0

_评论由:roberttweed

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

这不应该是一个破坏性的更改。因此它可以相当安全地引入到次要修订版中。这也是一个微不足道的修复。但是,有可能(尽管可能性很小)有人编写了依赖于运行时引发异常以以某种特殊方式处理空列表的代码(就像现在这样)。这样的代码很糟糕,应该重写,因此不应将其视为保留当前行为的理由,这限制了这些函数的通用用途,并可能导致现有生产代码中的微妙错误。

但是,为了绝对安全起见,最好不要将此更改回滚到现有的1.6.x分支,因为这不是安全问题。因此,我的建议是在现有维护分支(任何未来的1.6.x)中的文档中添加注释,并在未来的版本(1.7+)中评估为true。

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