Shared empty int-map
I notice that in the contrib library clojure.data.int-map
, a new instance of the empty PersistentIntMap
is created every time (int-map)
is called. This is different to how all the other persistent collections work, where there's only one single empty list/vector/map/set exists, and it is reused.
It's also the same situation with PersistentIntSet
, both dense and non-dense.
(empty my-int-map) doesn't preserve meta
the IPersistentCollection#empty()
implementation on PersistentIntMap
is:
(empty [this]
(PersistentIntMap. Nodes$Empty/EMPTY 0 nil))
So the metadata from this
is lost in the returned empty int-map. Other strict collection implementations retain metadata in the returned collection:
(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}]
The same is true for PersistentIntSet