You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用update函数更新Clojure中的map?

问题原因

Clojure的update函数的核心设计是基于原有键对应的值做函数运算来更新,固定语法规则为:
(update 目标map 待更新的键 处理旧值的函数 & 函数额外参数)
你写的(update p :name "David")里第三个参数直接传了字符串,不符合函数类型要求,因此报错。

正确实现方案

方案1:使用assoc(更推荐,语义更匹配直接赋值的场景)

如果只是需要直接给指定键设置固定值,不需要依赖原有值做运算,直接用Clojure专门用于map赋值的assoc函数即可:

(assoc p :name "David")
;; 执行后返回结果:{:name "David", :age 26}

方案2:符合update语法要求的写法

如果确实需要使用update实现,给第三个参数传入一个返回固定值的函数即可,常见写法有两种:

  • 用内置的constantly函数生成返回固定值的函数:
(update p :name (constantly "David"))
  • 自定义匿名函数忽略原有值直接返回新值:
(update p :name (fn [old-val] "David"))
;; 也可以用匿名函数简写:(update p :name #(identity "David"))
扩展说明

当你需要基于原有值做更新时,update的优势就会体现出来,比如要给原有年龄加1,直接写就行:

(update p :age inc)
;; 返回结果:{:name "James", :age 27}

内容的提问来源于stack exchange,提问作者CCNA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 06:06:05