使用带有多个密钥的Clojure更新

Mac*_*iel 6 clojure map

我正在尝试将函数应用于映射中与某个键匹配的所有元素.

(def mymap {:a "a" :b "b" :c "c"}) 
(update-in mymap [:a :b] #(str "X-" %))
Run Code Online (Sandbox Code Playgroud)

我期待着

{:a "X-a", :c "c", :b "X-b"}
Run Code Online (Sandbox Code Playgroud)

但我明白了

ClassCastException java.lang.String无法强制转换为clojure.lang.Associative clojure.lang.RT.assoc(RT.java:702)

有人可以帮我这个吗?

Ank*_*kur 10

update-in是更新地图中的单个键(在特定的嵌套级别,[:a :b]表示更新键:b在键的映射值内:a.

你想要什么可以使用reduce完成:

(reduce #(assoc %1 %2 (str "X-" (%1 %2)))
        mymap
        [:a :b])
Run Code Online (Sandbox Code Playgroud)

  • 或者`(进入mymap(对于[k [:a:b]] [k(str"X - "(mymap k))]))`. (2认同)