在Clojure函数中使用swap!
和reset!
有什么区别?我从clojure.core文档中看到,它们用于更改原子的值,但是我不确定何时使用swap!
和何时使用reset!
。
您将在什么情况下使用swap!
和您将在什么情况下使用reset!
?
[:input {:type "text"
:value @time-color
:on-change #(reset! time-color (-> % .-target .-value))}]
上面的代码是对按钮使用
reset!
的示例[:input.form-control
{:type :text
:name :ric
:on-change #(swap! fields assoc :ric (-> % .-target .-value))
:value (:ric @fields)}]
并且此按钮使用
swap!
swap!
和reset!
是否可以互换?谢谢
最佳答案
swap!
使用函数来修改原子的值。当原子的当前值很重要时,通常将使用swap!
。例如,增加一个值取决于当前值,因此您可以使用inc
函数。reset!
只需将原子的值设置为某个新值。当您只想设置值而无需关心当前值是什么时,通常会使用它。
(def x (atom 0))
(swap! x inc) ; @x is now 1
(reset! x 100) ; @x is now 100
(swap! x inc) ; @x is now 101
关于clojure - 什么时候应该使用交换或重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40844794/