2024 Clojure 状态调查! 分享您的想法。

欢迎!请参阅 关于 页面以了解更多关于这如何工作的信息。

0
data.int-map
重新标记

共享的空 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 也是同样的情况

1 个答案

+1

选中
...