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

欢迎!有关如何使用本页信息,请参阅 关于 页面。

0
Clojure

目前 count() 返回 int 类型 - 应将其提升为 long 类型。

在 long 类型溢出时,count() 应抛出 ArithmeticException。另见 CLJ-1229。

4 个答案

0

评论者:slipset

从这个问题看来,有一些问题,如下
clojure.lang.RT#toArray 线 1658 行
你们将基于集合的 count 创建一个新的 Object 数组。
看起来 new Object(link: ) 接受一个 int 类型的参数,所以必须将 long 类型的结果强制转换为 int 类型才能使其工作。

0

评论者:alexmiller

如果你创建的 Object(link: ) 超过 2147483647,你可能有其他问题。 ;)

但确实,此工单需要更彻底的分析,以确定影响范围。在这种情况下,我认为如果 count 小于等于 Integer/MAX_VALUE,则应继续执行,否则应抛出异常。

0

评论者:slipset

这也会影响到 java.util.Collection 的 size 属性
clojure.lang.APersistentSet#size 线 164
size 属性由以下指定

http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html#size()

0
参考: https://clojure.atlassian.net/browse/CLJ-1729(由 alexmiller 提出)
...