gpt4 book ai didi

clojure - 如何使用一组绑定(bind)的名称作为键来创建映射?

转载 作者:行者123 更新时间:2023-12-02 04:07:39 25 4
gpt4 key购买 nike

我想要类似 {:keys [...]} 构造的反转:

(let [x 1 y 2 z 3] (create-map x y z))

...应该返回{:x 1 :y 2 :z 3}

换句话说,我想避免像 {:x x :y y :z z} 中那样输入每个变量的名称两次。

我想要这个函数的一个例子:

(defn create-some-service-handle [user-id password api-key] 
{ :api-key api-key
:user-id user-id
:connection (obtain-connection user-id password) })

最佳答案

如果您正在寻找能够恰好位于 create-map 所在位置的东西,那么您将需要一个宏,因为您需要对这些符号进行未求值。这将是一个非常简单的宏:

(defmacro create-map
[& syms]
(zipmap (map keyword syms) syms))

这只是获取未评估的符号,maps keyword 获取关键字序列,然后 zipmaps 的键序列原来的符号。由于它是一个宏,因此之后将评估结果形式,产生关键字到值(符号引用的值)的映射。

所以如果你去做:

(let [x 1 y 2 z 3] (create-map x y z))

...它将返回:

{:x 1 :y 2 :z 3}

关于clojure - 如何使用一组绑定(bind)的名称作为键来创建映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11705525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com