这并不是关于Long和int类型之间的区别,因为Clojure中的整数数字字面量始终是long类型。这是关于值的范围以及它不适用于Java的int
。
我不知道这是否确定,但可以推测这个限制是出于实用性的考虑。
Java中的字符串和数组有大小限制,这个限制可以放入int
。通用List
接口也可以只用int
来索引。
同样的,对于索引的Clojure集合也是如此。虽然Clojure的持久向量在理论上有可能使用longs作为基本索引类型,因为它们依赖于大小为32的数组,但是这并不实用,因为即使一个简单的数组也有Integer/MAX_VALUE
的8字节值,也会占用17 GB的RAM,而持久向量并不是简单的数组。
至于懒惰的或没有随机访问的功能,使用高索引的nth
将会是一个费时的反模式。这并不是说它永远不会需要,但需要它的人是一个强烈的信号,表明为专门的问题选择了错误的数据结构。