我开始学习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")
感谢
答案 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)))))