如果你使用类型 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。
我不知道这被视为错误,还是更可能的是一个设计决策,为了在热代码路径中快速处理最常见的情况(java.lang.Long是Clojure中的默认整型类型)。