如果你使用类型byte
作为索引,而不仅仅是short
,它也会返回nil。
发生这种事故的原因是,Clojure源文件APersistentVector.java中的valAt
方法(用于在Clojure的PersistentVector类中查找值)调用了包clojure.lang.Util中的isInteger方法,以确定索引是否为整数类型。如果它的参数是java.lang.Integer、java.lang.Long、clojure.lang.BigInt或java.math.BigInteger之一,该方法返回true,对于其他类型返回false。
我不知道这被认为是bug,还是更可能是一种设计决策,以在这个热点代码路径中快速处理最常见的情况(java.lang.Long是Clojure中的默认整数类型)。