2011-10-01 62 views
1

多个向量的clojure.contrib.sql模块具有create-table函数,它的表名和规格列表,像这样:分配变量Clojure中

(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

回答

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)