有什么快速的方法可以将闭包恢复或重置为其初始状态?例如,在下面的函数中,如何将与 myClosureFn 关联的 stat1 和 stat2 的值重置为 1?
这个问题的背景:我在不同的函数中使用下面的结构,一个函数可能会“弄乱”与闭包相关的值。因此,我需要将其重置/恢复为初始状态,以便再次将其传递给另一个函数。
(def myClosureFn
(let [stat1 (atom 1)
stat2 (atom 1)
;..stat3 stat4 ...
]
(fn [m]
(swap! stat1 inc)
(reset! stat2 (* 2 m))
[@stat1 @stat2])))
(myClosureFn 1) ;--> [2 2]
(myClosureFn 2) ;--> [3 4]
(myClosureFn 2) ;--> [4 4]
(myClosureFn 3) ;--> [5 6]
;...
; how to get [ 1 1 ] back to myClosureFn ?