首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Clojure中更新hash-map中的字符串值?

如何在Clojure中更新hash-map中的字符串值?
EN

Stack Overflow用户
提问于 2020-06-10 05:56:00
回答 1查看 109关注 0票数 0

为什么这个不起作用?

代码语言:javascript
复制
(def app-state (atom {:title "foo"}))

(swap! app-state update-in [:title] "bar")

我能找到的所有update-in示例都是针对数值而不是字符串。

它在Clojure中抛出一个类类型转换异常,并且

代码语言:javascript
复制
Unhandled clojure.lang.ExceptionInfo
 #object[TypeError TypeError: f.call is not a function]

在ClojureScript中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-10 06:08:57

只需使用assocassoc-in

代码语言:javascript
复制
(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"将用作函数,但字符串不能被调用,因此您会看到错误。

因此,您也可以使用忽略其参数并始终返回相同内容的函数。

代码语言:javascript
复制
(swap! app-state update-in [:title] (fn [_] "fizz"))      => {:title "fizz"}
(swap! app-state update-in [:title] (constantly "buzz"))  => {:title "buzz"}

当然,这在一开始就否定了使用update而不是assoc的理由。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62292523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档