我在地图中有原子,这可能是也可能不是一个好主意,但关键是我需要对原子进行deref,这样我就可以对地图进行json-str,并且json-str不能处理原子,所以我写了这个:
(defn deatomize- [m]
(cond
(instance? clojure.lang.Atom m) #(deatomize- @m)
(map? m) (zipmap (keys m) (map #(trampoline deatomize- %) (vals m)))
:else m
)
)
(defn deatomize [m] (trampoline deatomize- m))
Run Code Online (Sandbox Code Playgroud)
这似乎有效,但a)它是好的,b)有更好的方法吗?
mik*_*era 11
我认为你的代码可以正常工作.
一些一般反馈:
这是另一种考虑因素:
(defn deatomize [m]
(cond
(instance? clojure.lang.IDeref m)
(recur @m)
(map? m)
(reduce
(fn [current-map [k v]]
(let [nv (deatomise v)]
(if (= v nv) current-map (assoc current-map k nv))))
m
m)
:else m))
Run Code Online (Sandbox Code Playgroud)