I've got a piece of code to implement a ref of a map of atoms containing maps
> (def a (example.DynaRec.)
> (dosync (assoc! a 3 {:id 3 :contents "stuff"} 4 {:id 4}))
;;=> #[DynaRec@1a659078: {4 [<Atom@118eb00c: {:id 4}] 3 [Atom@242110fc: {:id 3 :contents "stuff"}]]
I want to make change the way this is displayed in the repl so that it only outputs
> a
;;=> ({:id 3 :contents "stuff"}
;; {:id 4})
how can this be done? The code is shown below:
(ns example.dyna-rec (:gen-class :name example.DynaRec :prefix "-" :init init :state state :extends clojure.lang.AFn :implements [clojure.lang.IDeref clojure.lang.Seqable clojure.lang.ILookup clojure.lang.ITransientMap])) (defn- $ [this] (:data (.state this))) (defn- valid? ([e] (valid? e [])) ([this e] (every? #(contains? e %) (:required (.state this))))) (defn -deref [this] @($ this)) (defn -valAt ([this k] ((-deref this) k nil)) ([this k nv] (if-let [vatom ((-deref this) k nv)] @vatom))) (defn -invoke ([this k] (-valAt this k)) ([this k nv] -valAt this k nv)) (defn -seq [this] (seq (-deref this))) (defn -count [this] (count (-deref this))) (defn -without [this obj] (alter ($ this) dissoc obj)) (defn -assoc ([this obj] (-assoc this (:id obj) obj)) ([this k v] {:pre [(valid? this v) (= k (:id v))]} (alter ($ this) assoc k (atom v)) this)) (defn -conj [this obj] (-assoc this obj)) (defn -persistent [this] (-deref this)) (defn -init [] [[] {:required #{:id} :data (ref {})}])