将变量列表转换为名称变量映射
Convert list of vars to a name-var map
我正在为 Clojure 使用 Yesql 库。它的 defqueries
宏 returns 代表 SQL 查询的 Var 列表。我想将该列表转换为查询名称到 Var 的映射,并提出了以下变体:
(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)))
这么简单的任务,显得很不雅和繁琐。你能推荐一个更短更地道的版本吗?
谢谢!
您可以创建名称 -> var 映射,然后使用 into
:
(def query-map
(let [pairs (map (fn [v] [(->> v meta :name keyword) v]) main-queries)]
(into {} pairs)))
我正在为 Clojure 使用 Yesql 库。它的 defqueries
宏 returns 代表 SQL 查询的 Var 列表。我想将该列表转换为查询名称到 Var 的映射,并提出了以下变体:
(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)))
这么简单的任务,显得很不雅和繁琐。你能推荐一个更短更地道的版本吗?
谢谢!
您可以创建名称 -> var 映射,然后使用 into
:
(def query-map
(let [pairs (map (fn [v] [(->> v meta :name keyword) v]) main-queries)]
(into {} pairs)))