4

assoc当索引超出范围时可能会抛出 IndexOutOfBoundsException,如下所示:

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

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

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

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

谢谢

4

1 回答 1

3

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

在 assoc 文档字符串中提到了对向量的特殊处理:

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

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

于 2013-05-12T11:16:22.893 回答