在Clojure中将变量赋值给多个向量

时间:2011-10-01 19:55:12

标签: clojure

clojure.contrib.sql模块有一个create-table函数,它接受表名和规范列表,如下所示:

(sql/create-table :services
                  [:id :serial "PRIMARY KEY"]
                  [:service_name :varchar "NOT NULL"]
                  [:pass_hash :varchar "NOT NULL"]
                  [:token :varchar "NOT NULL"])

如果我一次又一次地重复使用相同的列,有没有办法定义这样的内容?

(def same-columns 
                  [:id :serial "PRIMARY KEY"]
                  [:service_name :varchar "NOT NULL"]
                  [:pass_hash :varchar "NOT NULL"]
                  [:token :varchar "NOT NULL"])

当我尝试在REPL中运行它时出现错误,因为它向def传递了太多参数。

1 个答案:

答案 0 :(得分:3)

您可以使用apply

(def same-columns [[:id :serial "PRIMARY KEY"]
                   [:service_name :varchar "NOT NULL"]
                   [:pass_hash :varchar "NOT NULL"]
                   [:token :varchar "NOT NULL"]])

(apply sql/create-table 
       :services 
       same-columns)

如果您有其他列,也可以添加这些列:

(apply sql/create-table 
       :services
       [:some-column :varchar "NOT NULL"]
       same-columns)