【发布时间】:2014-08-21 17:38:14
【问题描述】:
我在 refs 中有两个映射,并希望在一个事务中将它们相互关联。
我的函数如下所示:
(defn assoc-two
[one two]
(let [newone (assoc @one :two two)
newtwo (assoc @two :one one)]
(ref-set one newone)
(ref-set two newtwo)))
现在我像这样打电话给assoc-two:
(dosync (assoc-two (ref {}) (ref {})))
此时我得到了 StackOverflowError。
我也试过这个:
(defn alter-two
[one two]
(alter one assoc :two two)
(alter two assoc :one one))
如果one 有一个引用two 的条目(反之亦然)并且仍在一个事务中,是否可以这样做?
【问题讨论】:
标签: clojure circular-reference refs