这不仅仅是因为long类型与int类型有关,因为Clojure中的整数字面量始终是long类型。这是关于值的范围以及它不适合Java的int
。
我不知道确切的原因,但我可以猜测这个限制是由于实用性。
Java中的字符串数组都有适合于int
尺寸的限制。泛型的List
接口也可以仅使用int
作为索引。
相同对于索引的Clojure集合。虽然从理论上讲,Clojure的持久向量可以使用long作为基索引类型,因为它们依赖于大小为32的数组,但这并不实用,因为即使是一个包含8字节值的普通数组,其Integer/MAX_VALUE
也只需要17 GB的RAM,而持久向量不是普通数组。
至于任何懒惰的或没有随机访问的数据,在高索引下使用nth
将是一个耗时的反模式。这并不是说它永远不会需要,但如果确实需要它,那么这可能是一个强烈迹象表明,适合该问题的数据结构选择不当。