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

欢迎!有关如何使用这个功能的更多信息,请参阅 关于 页面。

0
Java 互操作

> 函数在 0 个参数的情况下表现不一致。

`

user> (doc >)

clojure.core/>
([x] [x y] [x y & 更多])
如果数字是单调递减的,则返回非 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))

`

看来文档应该更新,应该返回 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 提出)
...