2015-09-25 48 views
0

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

拿到一张地图:

{:data-extracts [ 
         {:name "some name" 
         :data "some 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"])) 

但如我所料不工作。

回答

3

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

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

如果我在上面像'(更新我的地图指定我的地图[:数据提取0:数据]“新数据“)是告诉我字符串不能被转换为函数。猜测是因为“新数据”不是字符串 –

+0

@ChrisEdwards查看最新的编辑。在发布后不久我意识到,抹去了答案并对其进行了编辑。对困惑感到抱歉。 –

+0

我确实遇到过关联,但无法弄清我的用例的语法。谢谢。 –