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

如何在Clojure中更新Atom内嵌套Map中的数组?

正确更新嵌套Map结构的Atom数组元素

问题分析

你之前的写法错误在于swap!的使用逻辑:swap!的第二个参数必须是更新函数,直接传入:assoc关键字不符合要求;同时嵌套Map的数组更新需要逐层定位路径,无法通过简单的assoc操作完成。

基础更新写法

要向:one下的:year-one数组添加{:name "someone"},可以结合swap!和update-in函数实现,代码如下:

(swap! scors update-in [:one :year-one] conj {:name "someone"})

代码说明

  • update-in 负责定位嵌套Map的路径[:one :year-one],找到该路径对应的数组后,调用conj函数将新元素追加到数组末尾。
  • swap! 会自动把Atom当前存储的Map值传入update-in,并将更新后的新Map重新存入Atom,保证并发场景下的安全更新。

适配for循环的动态更新

如果需要在for循环内根据if条件动态选择更新路径(比如切换:one/:two/:three或不同年份),可以将路径拆分为变量:

;; 根据each的条件确定目标key和年份
(let [target-key (if (:some-condition each) :one :two)
      target-year :year-one]
  (swap! scors update-in [target-key target-year] conj (:set-of-inputs each)))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:22:39