在Clojure的地图上更改值的正确方法

GBa*_*oso 1 clojure

好吧,我是clojure的新手,这应该很容易,但是对于我的一生,我找不到答案

假设我有这张地图

(def mymap {:a 10 :b 15})
Run Code Online (Sandbox Code Playgroud)

现在,我想将:a的值更改为5。我不知道如何正确执行此操作

我知道update并且assoc可以进行更改,但它们都接受一个函数作为最后一个参数,该参数适用于该值。我不想那样,我不想运行任何函数,我只想简单地将:a设置为5。

我想我可以传递一个仅返回5并忽略arg的匿名函数,但这是正确的方法吗?对我不好

(update mymap :a (fn [arg] 5))

Car*_*ate 5

assoc不将函数作为最后一个参数;除非您想将功能与地图中的按键关联。(assoc mymap :a 5)做你想要的。

不过,我要补充一点update,它确实带有一个功能,在与一个constantly或另一个功能结合使用时也可以在这里使用(尽管没有理由在上使用它assoc):

; constantly returns a function that throws away any arguments given to it,
; and "constantly" returns the given value
(update mymap :a (constantly 5))

; Basically the same as above
(update mymap :a (fn [_] 5))
Run Code Online (Sandbox Code Playgroud)