【发布时间】:2014-08-30 06:04:47
【问题描述】:
我正在尝试解决一个问题:我需要从传入的值创建一个映射,但是虽然这些值的符号名称是一致的,但它们映射到的 键 却不是。例如:我可能会收到一个用户 ID 值。在代码中,我总是可以使用符号user-id——但根据其他因素,我可能需要制作一张地图{"userId" user-id}或{"user_id" user-id}或{:user-id user-id}或——好吧,你明白了。
我可以编写一个宏,让我中途停留:
(defmacro user1 [user-id] `{"userId" ~user-id}
(defmacro user2 [user-id] `{"user_id" ~user-id}
但我更愿意做的是定义一组地图,然后将它们与一组给定的符号组合:
(def user-id-map-1 `{"userId" `user-id}
(defn combiner [m user-id] m) ;; <-- Around here, a miracle occurs.
我不知道如何进行此评估。似乎我应该能够制作一个包含未评估符号的映射,然后在将这些符号绑定为局部变量的函数或宏的词法范围内查找这些符号——但是 怎么样?
【问题讨论】:
-
现在有两个很好的答案;我希望我可以将两者都标记为正确。谢谢你们,SO的聪明人。