假设我们有一张看起来像这样的地图:
(def m {:a {:foo "bar"}})
现在我们想用一些新值更新键 :a in m :
(def vs {:baz "qux"})
如果这是 Python,我们可以执行以下操作:
>>> d = {'a': {'foo': 'bar'}}
>>> d['a'].update({'baz': 'qux'})
>>> d
{'a': {'foo': 'bar', 'baz': 'qux'}}
我发现的最简单的 Clojure 等价物是定义这样的函数:
(defn update-key
"
Updates a given key `k` over a map `m` with a map of values `vs`.
"
[k m vs]
(assoc m k (merge (k m) vs)))
然后调用如下:
(update-key :a m vs)
; => {:a {:foo "bar" :baz "qux"}}
update()
所以我的问题是:实现与Python dicts 提供的方法相同的功能的最惯用和正确的方法是什么?