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

标签 clojure

在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/

相关文章:

clojure - 学习如何使用 Clojure(语言)和 Closure(Google 图书馆)

namespaces - 命名空间有什么用?用法呢?

clojure - 从Java直接调用 `clojure.lang.Compiler.compile`进行AOT编译Clojure

parameters - 为什么 Clojure 开发人员使用 "xs"作为函数参数?

javascript - 如何发起和处理 POST 请求

clojure - 我如何用这个 Clojure 代码重写 (def)?

heroku - 如何在 Heroku 的 Clojure buildpack 中配置构建命令?

file-io - 将 clojure 映射/数组写入文件并读取它们

clojure - 使用 Prismatic Sc​​hema 验证多个多态值

clojure - 如何串联多个函数?