将地图中的函数基于其键应用于地图中的每个值

Bud*_*sno 2 clojure

假设我有一张地图:

{:name "foo"
 :age "bar"}
Run Code Online (Sandbox Code Playgroud)

而另一个

{:name (fn [val] (println val))
 :age (fn [val] (= val "bar"))}
Run Code Online (Sandbox Code Playgroud)

我想将:name第二个地图上键入的功能应用到第一个地图,第一个地图也被键入,:name并且功能键入:age到第一个键入的地图:age.怎么做clojure方式?

edb*_*ond 7

您可以使用merge-with

(def m1 {:name "foo"
         :age "bar"})

(def m2 {:name (fn [val] (println val))
         :age (fn [val] (= val "bar"))})

user=> (merge-with #(%1 %2) m2 m1)
foo
{:name nil, :age true}
Run Code Online (Sandbox Code Playgroud)