在clojure中将哈希映射应用于匿名函数的快速方法
我的问题是是否给了hashmap在clojure中将哈希映射应用于匿名函数的快速方法,clojure,hashmap,anonymous-function,Clojure,Hashmap,Anonymous Function,我的问题是是否给了hashmap (定义我的地图{'x1'y2'z}) 我可以将其应用于匿名函数 (fn[x y z](+x(*y z)) 使参数与映射中的键匹配,比如 (应用我的地图(fn[x y z](+x(*y z))) 这个问题有没有简单的解决方法?我觉得有,但我想不出来。您可以使用地图分解: user> (def my-map {'x 1 'y 2 'z 3}) #'user/my-map user> ((fn [{x 'x y 'y z 'z}] (+ x (* y z
(定义我的地图{'x1'y2'z})
我可以将其应用于匿名函数
(fn[x y z](+x(*y z))
使参数与映射中的键匹配,比如
(应用我的地图(fn[x y z](+x(*y z)))
这个问题有没有简单的解决方法?我觉得有,但我想不出来。您可以使用地图分解:
user> (def my-map {'x 1 'y 2 'z 3})
#'user/my-map
user> ((fn [{x 'x y 'y z 'z}] (+ x (* y z))) my-map)
7
user> ((fn [{:syms [x y z]}] (+ x (* y z))) my-map)
7
通过这种形式的分解,您可以稍微简化:
user> (def my-map {'x 1 'y 2 'z 3})
#'user/my-map
user> ((fn [{x 'x y 'y z 'z}] (+ x (* y z))) my-map)
7
user> ((fn [{:syms [x y z]}] (+ x (* y z))) my-map)
7
或者,如果对地图关键点使用关键字:
user> (def my-map2 {:x 1 :y 2 :z 3})
#'user/my-map2
user> ((fn [{:keys [x y z]}] (+ x (* y z))) my-map2)
7
就我个人而言,我不会修改函数以接受map作为arg,因为它使函数本身不那么通用。另一种解决方案(我想对于任何语言来说都是惯用的)是在将所需的键传递给函数之前从map中选择键。这非常容易,因为map和symbol(以及关键字)都是如此在clojure中具有函数语义:
user> (apply f (map my-map ['x 'y 'z]))
;;=> 7
user> (apply f ((juxt 'x 'y 'z) my-map))
;;=> 7