assoc行为是否不一致?

时间:2013-05-12 11:10:02

标签: java clojure

当索引超出范围时,

assoc可能抛出IndexOutOfBoundsException,如:

user=> (assoc [] 1 nil)
IndexOutOfBoundsException   clojure.lang.PersistentVector.assocN(PersistentVector.java:137)

如果我尝试在索引0处设置值,为什么不会抛出相同的异常?

user=> (assoc [] 0 nil)
[nil]

在我看来,在这两种情况下,索引都超出了界限......

由于

1 个答案:

答案 0 :(得分:3)

Assoc-in使用assoc来修改所提供键的元素(在您的情况下为索引)。 Assoc-in(和assoc)尝试创建所需的键(或索引)。

关于向量的特殊处理在assoc docstring中提到:

  

当应用于矢量时,返回一个新的矢量       包含索引的val。 注意 - 索引必须是< =(计数向量)

更新:只是为了澄清:缺少的异常是一致的,因为0是空向量中新元素的有效索引,1不是。