Clojure assoc矢量行为

时间:2014-12-14 13:07:15

标签: clojure

应用于向量的Clojure assoc似乎具有不一致的行为

当向量中存在索引时,assoc替换值

(assoc [1 2 3 4 5] 3 42) => [1 2 3 42 5]

当索引与最后一个相邻时,向量增长(conj等效)

(assoc [1 2 3 4 5] 5 42) => [1 2 3 4 5 42])

否则抛出IndexOutOfBoundsExcpetion

虽然在reduce assoc等某些情况下很有用,但这可能会导致程序中的细微错误

对于vector而言,它是预期的行为还是可能是关联的bug?

1 个答案:

答案 0 :(得分:2)

预计。请参阅assoc的文档字符串,尤其是关于index参数的最后一个注释。

这在p的顶部描述。 101 Clojure Programming