Присвойте переменную нескольким векторам в Clojure - PullRequest
1 голос
/ 01 октября 2011

Модуль 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 Ответ

3 голосов
/ 02 октября 2011

Возможно, вы могли бы использовать применить для этого:

(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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...