(let [s (-> #{}
transient
(conj! (clojure.core/with-meta [-7] {:mynum 0}))
(conj! (clojure.core/with-meta [-7] {:mynum -1}))
persistent!)]
[(meta (s [-7])) (meta (first s))])
=> [{:mynum -1} {:mynum 0}]
基本上,"key"(通过在集合上序列化所得到的值)保留从第一个conj!开始的元数据,而"值"(通过调用invoke与"key"得到的)携带从第二个conj!开始的元数据。当我们不使用transients时,这不匹配其行为。
(let [s (-> #{}
(conj (clojure.core/with-meta [-7] {:mynum 0}))
(conj (clojure.core/with-meta [-7] {:mynum -1})))]
[(meta (s [-7])) (meta (first s))])
=> [{:mynum 0} {:mynum 0}]
在玩转zach tellman的collection-check时发现。