将变量列表转换为name-var映射

时间:2015-03-18 16:29:06

标签: clojure

我正在使用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)))

对于如此简单的任务来说,这似乎非常不优雅和繁琐。你能建议一个更短,更惯用的版本吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以创建名称 - > var映射然后使用into

(def query-map
  (let [pairs (map (fn [v] [(->> v meta :name keyword) v]) main-queries)]
    (into {} pairs)))