我想要一些像{: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) })
Run Code Online (Sandbox Code Playgroud)
如果您正在寻找能够准确定位于哪里create-map
的东西,那么您将需要一个宏,因为您需要将这些符号取消评估.这将是一个非常简单的宏:
(defmacro create-map
[& syms]
(zipmap (map keyword syms) syms))
Run Code Online (Sandbox Code Playgroud)
这只是发生未计算的符号,map
Ş keyword
下他们获得的关键字的序列,那么zipmap
S采用原始符号的按键顺序.由于它是一个宏,在此之后将评估结果表单,产生关键字到值的映射(符号引用的值).
所以,如果你去做:
(let [x 1 y 2 z 3] (create-map x y z))
Run Code Online (Sandbox Code Playgroud)
......它将返回:
{:x 1 y 2 :z 3}
Run Code Online (Sandbox Code Playgroud)
这是你想要的?
归档时间: |
|
查看次数: |
431 次 |
最近记录: |