如果你说这里的抽象是“持久化映射”,我也许能理解。但是对于“持久化哈希映射”,我就不那么确定了。
究竟是什么让数组映射成为哈希映射的实现?我在任何地方都找不到相关的说明(文献中明确将数组映射视为一个独立的东西),而实现实际上并不使用哈希,这也预料之中。从概念上讲,数组映射与哈希映射之间并没有任何联系点,除了两者都是映射这一事实。
即使我避免检查对任何此类映射调用“(type ...)”的结果,对于“哈希映射”这个词组,仍有隐含的期望,即会使用哈希函数。有人可能会认为这并不重要,我也同意在大多数情况下是这样的,但调试与哈希和映射相关的内容时,这确实会让人困惑。
更迷惑的是,尽管现在大家普遍认为有超过8个元素的映射字面量就是哈希映射,但是`(hash-map 1 2)`将返回哈希映射,而不是数组映射。
此外,还有一些其他区别。至少,`print-dup`在`PersistentHashMap`中定义了,但在`PersistentArrayMap`中没有,这导致了一些意外的行为,比如`#=(clojure.lang.PersistentArrayMap/create {})`。