我理解如果你说这里的抽象是“持久化映射”,但是对于“持久化哈希映射”就不是很理解了。
究竟什么使得数组映射成为哈希映射的实现?我在任何地方都没有找到关于它的提及(而且参考资料中明确将数组映射作为独立的东西提到),并且实现中根本没有使用哈希,这是预期的。从概念上讲,数组映射与哈希映射之间除了都是映射的事实外,没有任何关联之处。
即使我避免检查调用任何此类映射的`(type ...)`的结果,关于“哈希映射”这个词还是有期待——即会使用哈希函数。有人可能会说这根本不重要,我也同意对于几乎所有情况都是正确的,但是在调试与哈希和映射相关的事实时会非常令人困惑。
更令人困惑的是,尽管现在普遍认为具有超过8个条目的映射字面量是哈希映射,但是`(hash-map 1 2)`会返回哈希映射,而不是数组映射。
还有其他区别。至少,`print-dup`在`PersistentHashMap`中被定义,但在`PersistentArrayMap`中没有定义,导致出现意外的结果,比如`#=(clojure.lang.PersistentArrayMap/create {})`。