在 Clojure 中将变量分配给多个向量

发布于 2024-12-07 17:35:35 字数 663 浏览 0 评论 0原文

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 传递了太多参数。

The clojure.contrib.sql module has a create-table function that takes the table name and a list of specifications, like this:

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

If I'm reusing the same columns again and again, is there a way to define something like this?

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

When I tried running that in the REPL I got an error, because it passes too many arguments to def.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

赠佳期 2024-12-14 17:35:35

您可能可以使用 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)

You could probably use apply for this:

(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)

If you have other columns you can add those as well:

(apply sql/create-table 
       :services
       [:some-column :varchar "NOT NULL"]
       same-columns)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文