如果你们说这里的抽象是“持久化映射”,我可以理解。但是“持久化哈希映射”就不那么明确了。
究竟是什么让数组映射成为哈希映射的实现?我在任何地方都没有找到关于它的提及(而且参考文献也明确地将数组映射作为单独的东西提到),而且这个实现根本不使用哈希,这也在意料之中。从概念上讲,除了两者都是映射之外,没有关于数组映射使其与哈希映射相关的东西。
即使我避免检查对任何此类映射上的`(type ...)`调用结果,仍然会与“哈希映射”这个词联系起来——即将会使用`hash`函数。有人可能会争论这根本不重要,我同意对于几乎所有的案例来说这是正确的,但是当调试任何与哈希和映射相关的事情时,这确实会导致困惑。
更让事情变得混淆的是,尽管现在普遍认为具有超过8个项的映射字面量是哈希映射,但`(hash-map 1 2)`将返回哈希映射,而不是数组映射。
还有其他的区别。至少,`print-dup`为`PersistentHashMap`定义了,但不是为`PersistentArrayMap`定义的,这导致了一些意想不到的事情,比如`#=(clojure.lang.PersistentArrayMap/create {})`。