这不是关于长和int类型的问题,因为在Clojure中整数数字字面量总是long类型。这是关于值的范围和它不能适应Java的int
。
我不确定,但我可以推测这个限制是由于实际原因。
Java中的字符串和数组有一个适合int
的大小限制。通用的List
接口也可以只用int
作为索引。
同样的,对于索引Clojure集合。虽然从理论上讲,Clojure的持久向量可以使用long作为基础索引类型,因为它们依赖于大小为32的数组,但这并不实用,因为即使是一个含有Integer/MAX_VALUE
的8字节值的简单数组也将占用17 GB的RAM,而持久向量并不是简单的数组。
至于任何惰性或无随机访问的集合,使用nth
来获取高索引将是一个非常耗时的时间反模式。这并不是说它永远不需要,但是需要它的人强烈表明已经选择了错误的数据结构来处理该问题。