我正在使用Yesql库进行Clojure。其defqueries
宏返回表示SQL查询的Vars列表。我想将该列表转换为Vars的查询名称映射,并在下面提出了一个变体:
(def main-queries (defqueries "sql/main.sql"))
(def query-map
(apply hash-map
(reduce
(fn [coll query]
(conj coll (->> query meta :name keyword) query))
[] main-queries)))
对于如此简单的任务来说,这似乎非常不优雅和繁琐。你能建议一个更短,更惯用的版本吗?
谢谢!
答案 0 :(得分:1)
您可以创建名称 - > var映射然后使用into
:
(def query-map
(let [pairs (map (fn [v] [(->> v meta :name keyword) v]) main-queries)]
(into {} pairs)))