首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在clojure中将hash-map应用于匿名函数的快速方法

在clojure中将hash-map应用于匿名函数的快速方法
EN

Stack Overflow用户
提问于 2018-10-14 02:23:03
回答 2查看 87关注 0票数 1

我的问题是,是否给出了一个哈希图

(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)))

这个问题有简单的解决方法吗?我觉得有,但我想不出来。

EN

回答 2

Stack Overflow用户

发布于 2018-10-14 02:36:25

您可以使用地图解构:

代码语言:javascript
复制
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

你可以通过这种形式的描述来简化一下:

代码语言:javascript
复制
user> ((fn [{:syms [x y z]}] (+ x (* y z))) my-map)
7

或者,如果您使用关键字作为映射键:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2018-10-14 05:00:52

就我个人而言,我不会将函数修改为接受map作为arg,因为这会使函数本身变得不那么通用。另一种(我猜对于任何语言来说都是惯用的)解决方案是在将所需的键传递给函数之前从map中选择所需的键。这非常简单,因为map和symbol (以及关键字)在clojure中都有函数语义:

代码语言:javascript
复制
user> (apply f (map my-map ['x 'y 'z]))
;;=> 7

user> (apply f ((juxt 'x 'y 'z) my-map))
;;=> 7
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52795977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档