这并不是关于 long 与 int 类型的问题,因为 Clojure 中的整数数字字面量始终为 long 型。这是关于值的范围以及它不适用于 Java 的 int
的原因。
我不知道是否确定,但是我可以推测限制是由于实用性。
Java 中的字符串和数组有一个大小限制,该限制适合 int
。通用的 List
接口也可以只用 int
作为索引。
对于索引的 Clojure 集合也是如此。尽管 Clojure 的持久向量从理论上讲可以使用 long 作为基本索引类型,因为它们依赖于大小为 32 的数组,但是这并不实用,因为即使是包含 Integer/MAX_VALUE
个 8 字节数值的普通数组,也会占用 17 GB 的 RAM,而且持久向量不是普通数组。
至于任何懒加载或无随机访问的任何内容,在较高的索引处使用 nth
将是一个非常耗时的不良模式。但这并不意味着它永远不需要,但是需要它的人是一个强烈的信号,表明为手头的问题选择了错误的数据结构。