共享的空 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))
因此,这个 this
的元数据在返回的空 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
也是同样的情况