为什么不能用?
(def app-state (atom {:title "foo"}))
(swap! app-state update-in [:title] "bar")
我能找到的所有关于update-in的例子都是在数值上工作的,而不是字符串。
在Clojure中,它会抛出一个类投异常,并且
Unhandled clojure.lang.ExceptionInfo
#object[TypeError TypeError: f.call is not a function]
在ClojureScript中。
只要使用 assoc
或 assoc-in
:
(def app-state (atom {:title "foo"}))
(swap! app-state assoc :title "bazz") => {:title "bazz"}
(swap! app-state assoc-in [:title] "bar") => {:title "bar"}
update
和 update-in
需要一个函数,而不是像assoc
和 assoc-in
. 在你的例子中,字符串 "bar"
会被用作afunction,但字符串不能被调用,因此你看到了错误。
所以,你也可以使用一个忽略其参数的函数,并总是返回相同的东西。
(swap! app-state update-in [:title] (fn [_] "fizz")) => {:title "fizz"}
(swap! app-state update-in [:title] (constantly "buzz")) => {:title "buzz"}
当然,这有点违背了使用一个 update
而不是 assoc
首先是。