如何在Clojure中更新哈希图中的字符串值?

问题描述 投票:0回答:1

为什么不能用?

(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中。

clojure clojurescript
1个回答
4
投票

只要使用 assocassoc-in:

(def app-state (atom {:title "foo"}))

(swap! app-state assoc     :title "bazz")   => {:title "bazz"}
(swap! app-state assoc-in [:title] "bar")   => {:title "bar"}

updateupdate-in 需要一个函数,而不是像assocassoc-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 首先是。

© www.soinside.com 2019 - 2024. All rights reserved.