(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! 的元数据,而“value”(通过调用 invoke 使用“key”得到的值)携带第二个 conj! 的元数据。这*不符*于不使用瞬态集合时的行为。
(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 中发现的)