当使用类型 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 中的默认整数类型)而在热代码路径中做出的设计决定。