什么时候应该使用交换或重置

rbb*_*rbb 13 clojure

使用swap!reset!在Clojure函数之间有什么区别?我从clojure.core文档中看到它们用于改变原子的值,但我不确定何时使用swap!以及何时使用reset!.

你会在什么情况下使用swap!以及你会使用哪种情况reset!

[:input {:type "text"
         :value @time-color
         :on-change #(reset! time-color (-> % .-target .-value))}]
Run Code Online (Sandbox Code Playgroud)

上面的代码是reset!用于按钮的示例

[:input.form-control
          {:type      :text
           :name      :ric
           :on-change #(swap! fields assoc :ric (-> % .-target .-value))
           :value     (:ric @fields)}]
Run Code Online (Sandbox Code Playgroud)

而这个按钮使用 swap!

swap!reset!互换?

谢谢

Jos*_*osh 26

swap!使用函数来修改atom的值.swap!当原子的当前值很重要时,通常会使用.例如,递增值取决于当前值,因此您将使用该inc函数.

reset!只需将atom的值设置为某个新值即可.当你只想设置值而不关心当前值是什么时,通常会使用它.

(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
Run Code Online (Sandbox Code Playgroud)

  • 也许值得注意的是*原因*使用swap!当下一个val依赖于旧时是为了获得原子性的优势(重置!x(inc @x))不是线程安全的,而(swap!x inc)是 (9认同)