我们有一个带有一些键和布尔值的原子:
(def btns (reagent.core/atom {:a true :b true :c true}))
Run Code Online (Sandbox Code Playgroud)
我需要更改所有键的状态,如下所示: {:a false :b false :c false}
我试过这个,但不是很好的解决方案,并且不起作用:
(for [btn @btns]
(swap! btns assoc (key btn) false))
Run Code Online (Sandbox Code Playgroud)
您可以通过这种方式更新多个密钥:
user> (def a (atom {:a true :b true :c true}))
;;=> #<Atom@af0fa6a: {:a true, :b true, :c true}>
user> (swap! a into {:b false :c false})
;;=> {:a true, :b false, :c false}
Run Code Online (Sandbox Code Playgroud)
或者像这样:
user> (swap! a assoc :a false :c false)
;;=> {:a false, :b true, :c false}
Run Code Online (Sandbox Code Playgroud)
如果你想将 atom 中的所有键更新为 false,它也可能如下所示:
user> (reset! a (zipmap (keys @a) (repeat false)))
;;=> {:a false, :b false, :c false}
Run Code Online (Sandbox Code Playgroud)
或者像这样:
user> (swap! a #(zipmap (keys %) (repeat false)))
;;=> {:a false, :b false, :c false}
Run Code Online (Sandbox Code Playgroud)
更新
此外,最好将 util 函数抽象出来,使其更具可读性:
(defn assoc-all-keys [data val]
(zipmap (keys data) (repeat val)))
user> (swap! a assoc-all-keys false)
;;=> {:a false, :b false, :c false}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |