这并不是关于long和int类型的问题,因为Clojure中整数数字字面量总是long。这是关于值的范围,以及它不适用于Java的int
。
我不确定,但可以推测这个限制是由于实际原因。
Java中的字符串和数组有一个大小限制,这个限制可以放得下int
。泛型List
接口也可以只使用int
作为索引。
对于索引的Clojure集合来说也是如此。尽管Clojure的持久向量在理论上可以使用long作为基本索引类型,因为它们依赖于大小为32的数组,但这并不太实用,因为即使是包含8字节值的普通数组,其Integer/MAX_VALUE
也为17 GB的RAM,而持久向量不是普通数组。
至于任何惰性或没有随机访问的东西,使用nth
进行高索引将是一个非常耗时的反模式。这并不意味着它永远不需要,但需要它的人是一个强烈的信号,表明为手头的问题选择了错误的数据结构。