我在clojure中玩了一下原子。我有一個指向lazy-seq
。在另一位代碼中,我想將原子的值更新爲序列上的next
的結果,但假設swap!
和reset!
都返回更新後的值,執行永遠不會結束。 我發現我總是可以將打電話給swap!
,reset!
包含在一個do語句中,然後返回nil
,但我想知道這是多麼地道,或者是否有替代解決方案來做到這一點。clojure中的慣用惰性原子
不會終止:
(def x (atom (range)))
(swap! x next)
終止
(def x (atom (range)))
(do (swap! x next) nil)
(first @x) ;1
(do (swap! x next) nil)
(first @x) ;2
謝謝!這給了我的問題的解決方案。我想按照你的第一個選項,在do語句中包裝呼叫應該被認爲是慣用的 – emanjavacas