为什么这个不起作用?
(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中。
发布于 2020-06-10 06:08:57
只需使用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"将用作函数,但字符串不能被调用,因此您会看到错误。
因此,您也可以使用忽略其参数并始终返回相同内容的函数。
(swap! app-state update-in [:title] (fn [_] "fizz")) => {:title "fizz"}
(swap! app-state update-in [:title] (constantly "buzz")) => {:title "buzz"}当然,这在一开始就否定了使用update而不是assoc的理由。
https://stackoverflow.com/questions/62292523
复制相似问题