Clojure,更新地图中的嵌套内容

时间:2015-09-25 15:34:58

标签: clojure

我对更新地图中的值所需的语法感到困惑,其中所述值是地图的矢量。

给出一张地图:

   {:data-extracts [
                       {:name "some name"
                        :data "some data"
                        }]}

如何更新:data的值,我知道您可以使用assocconj来修改地图(以及返回新地图)但我不确定嵌套元素是如何工作的本。

期望的结果:

   {:data-extracts [
                       {:name "some name"
                        :data "new data"
                        }]}

有没有办法做类似以下的事情?

(update :data-extracts :data "new data")

这是如何实现的?

我尝试了以下内容:

(assoc opts :data-extracts [:name "Secret Escapes"
                            :data "new data"]))

但这并不像我预期的那样有效。

1 个答案:

答案 0 :(得分:3)

使用嵌套结构时,您需要使用*-in - 函数(在本例中为assoc-in)并为每个嵌套级别指定一个键。在矢量的情况下,它只是索引,如果是地图,很明显:

(assoc-in [:data-extracts 0 :data] "new data")