我的问题是,是否给出了一个哈希图
(def my-map {'x 1 'y 2 'z})
我可以将其应用于匿名函数,
(fn [x y z] (+ x (* y z))
这样参数就可以与map中的键相匹配,例如
(apply-ish my-map (fn [x y z] (+ x (* y z)))
这个问题有简单的解决方法吗?我觉得有,但我想不出来。
发布于 2018-10-14 02:36:25
您可以使用地图解构:
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发布于 2018-10-14 05:00:52
就我个人而言,我不会将函数修改为接受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))
;;=> 7https://stackoverflow.com/questions/52795977
复制相似问题