Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Clojure的下一个函数中解析可选参数_Clojure - Fatal编程技术网

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

在Clojure的下一个函数中解析可选参数,clojure,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") 谢谢你很接近了,你只是多了一对方括

我从学习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")

谢谢

你很接近了,你只是多了一对方括号。&语法会自动将所有额外的参数放入一个向量中,因此如果

(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")
您的参数将包含[blue foo bar]


编辑:您还必须注意您的符号名称:如果您的函数名为query,那么您不希望有一个名为query的参数,否则事情会变得混乱。我将参数改为query string而不是query。

好的,所以我解决了问题

由于我是clojure的新手,我错误地认为我想要解析jdbc/query函数的多个参数。相反,我希望总是解析一个参数,一个向量,它要么只包含一个sql、一个sql和参数,要么包含多个参数的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))))) 

parse的确切含义是什么?¶ms将它们放在一个序列中,而不是向量中。在您的示例中,params将包含blue、foo barthanks,以获得迄今为止的帮助。使用这个defn query[query string¶ms]jdbc/with db connection[db con pg]jdbc/query pg[query string params]我仍然从viq_id=?名称~*?Bla fattoria,这是pg函数Frank C的一个参数。-你是对的,我在看原始代码中的方括号,输入向量而不是序列。谢谢你的更正。