如果您使用类型 byte
作为索引,它也会返回 nil,不仅对 short
。
这种情况发生的原因是,在 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 中用作默认整数类型)在这种性能关键代码路径中。