共享的空 int-map
我注意到在 contrib 库 clojure.data.int-map
中,每次调用 (int-map)
时都会创建一个新的空 PersistentIntMap
实例。这与所有其他持久集合的工作方式不同,其中只有一个单例的空列表/向量/映射/集合存在,并且它被重用。
与 PersistentIntSet
的情况也相同,无论是密集还是非密集的。
(empty my-int-map) 不会保留元数据
在 PersistentIntMap
上的 IPersistentCollection#empty()
实现是
(empty [this]
(PersistentIntMap. Nodes$Empty/EMPTY 0 nil))
因此,此处的元数据在返回的空 int-map 中丢失。其他严格的集合实现仍在返回的集合中保留元数据
(mapv (fn [coll] (meta (empty (with-meta coll {:a 1}))))
[() [] {} #{} (sorted-map) (sorted-set)])
=> [{:a 1} {:a 1} {:a 1} {:a 1} {:a 1} {:a 1}]
对于 PersistentIntSet
也是如此