我使用lobos创建一组表格:
(create
(table :users
(integer :id 20)
(varchar :name 100)))
表的架构保存在seq:
中([:integer :id 20] [:varchar :name 100])
如何使用seq生成该表达式?我发现可以使用 clojure.contrib / apply-macro ,但还有其他方法吗?
答案 0 :(得分:2)
您可以使用以下宏:
(defmacro table-create [name coll]
`(~'create
(~'table ~name ~@(map (fn [r]
(let [[type c v] r]
(list (symbol (subs (str type) 1)) c v)))
coll))))
以下是一个示例运行:
(macroexpand-1 '(table-create :users ([:integer :id 20] [:varchar :name 100])))
;=> (create
(table :users
(integer :id 20)
(varchar :name 100)))