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))

因此,此处的元数据在返回的空 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

选中
...