在Clojure中解析下一个函数中的可选参数

时间:2016-02-17 17:51:01

标签: clojure

我开始学习Clojure,我不知道如何解析下一个函数的可选数量的参数。

这是我的代码

(defn query
  [query & [params]]
  (jdbc/with-db-connection [db-con pg]
    (jdbc/query pg [query params])))

我想解析一下

(query "select * from blogs where tag=? and title=?" "blue" "foo bar")

感谢

2 个答案:

答案 0 :(得分:0)

你关闭了,你只需要一对方括号。 "&"语法会自动将所有额外的参数放入向量中,所以如果你这样做了

(defn query
  [query-string & params]
  (jdbc/with-db-connection [db-con pg]
    (jdbc/query pg [query-string params])))

然后用

调用它
(query "select * from blogs where tag=? and title=?" "blue" "foo bar")

您的params将包含["蓝色" " foo bar"]。

编辑:你还必须看你的符号名称:如果你的功能被命名为"查询"你不想要一个名为" query"同样,或者事情会变得混乱。我将参数更改为query-string而不是query

答案 1 :(得分:0)

好的,所以我解决了我的问题。

由于我是clojure的新手,我错误地看到我想要解析jdbc/query函数的多个参数。相反,我想总是解析一个参数,一个向量,它只包含一个sql,一个sql和params,或者一个包含多个参数的sql。

这就是我解决它的方法。

(defn query
([query-string] 
(jdbc/with-db-connection [db-con pg]
          (jdbc/query pg [query-string])))
([query-string & params]
 (jdbc/with-db-connection [db-con pg]
          (jdbc/query pg (concat [query-string] params)))))