次のようなマップがあるとします。
(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 が提供するメソッドと同じ機能を実現するための最も慣用的で正しい方法は何ですか?