获取传递给Clojure函数的错误参数数

获取传递给Clojure函数的错误参数数,clojure,Clojure,更奇怪的是。我正试图定义和调用这个函数。它有3个参数,但当我用3个参数调用它时,我得到 Wrong number of args (1) passed to: solr-query$correct-doc-in-results-QMARK-$fn [Thrown class clojure.lang.ArityException] Wrong number of args (2) passed to: solr-query$correct-doc-in-results-QMARK- [T

更奇怪的是。我正试图定义和调用这个函数。它有3个参数,但当我用3个参数调用它时,我得到

Wrong number of args (1) passed to: solr-query$correct-doc-in-results-QMARK-$fn
 [Thrown class clojure.lang.ArityException]
Wrong number of args (2) passed to: solr-query$correct-doc-in-results-QMARK-
  [Thrown class clojure.lang.ArityException]
Wrong number of args (4) passed to: solr-query$correct-doc-in-results-QMARK-
  [Thrown class clojure.lang.ArityException]
当我用两个参数调用它时,我得到

Wrong number of args (1) passed to: solr-query$correct-doc-in-results-QMARK-$fn
 [Thrown class clojure.lang.ArityException]
Wrong number of args (2) passed to: solr-query$correct-doc-in-results-QMARK-
  [Thrown class clojure.lang.ArityException]
Wrong number of args (4) passed to: solr-query$correct-doc-in-results-QMARK-
  [Thrown class clojure.lang.ArityException]
当我用4个参数调用它时,我得到

Wrong number of args (1) passed to: solr-query$correct-doc-in-results-QMARK-$fn
 [Thrown class clojure.lang.ArityException]
Wrong number of args (2) passed to: solr-query$correct-doc-in-results-QMARK-
  [Thrown class clojure.lang.ArityException]
Wrong number of args (4) passed to: solr-query$correct-doc-in-results-QMARK-
  [Thrown class clojure.lang.ArityException]
以下是函数的定义:

(defn correct-doc-in-results? [query results docid]
  "Check if the docid we expected is returned in the results"
  (some #(.equals docid) (map :id (get results query))))
下面是我如何尝试调用它(来自emacs中使用swank的REPL):


有人知道发生了什么吗?为什么当我通过3个参数时,它认为我只通过了1个参数,而在2个或4个参数时却正确了呢?我还不是一个非常流利的clojure程序员,但是定义函数是非常基本的

solr查询结果QMARK中的$correct doc-

solr查询结果QMARK中的$correct doc-$fn

第一个是指您的函数
在结果中更正文档?
。后者是指在该函数中定义的某个匿名函数


如果您传递了2或4个参数,那么您的顶级函数将出现错误,正如预期的那样。当您传递3个参数时,
#(.equals docid)
会得到一个错误,因为
#(.equals docid)
想要零个参数,但得到的却是一个。尝试将其更改为
#(.equals%docid)

@Brian实际上,错误是因为匿名函数需要零个参数(没有%),并且在被
某些人调用时得到一个参数。当然,如果函数实际上是在没有参数的情况下调用的,那么它将通过仅使用一个参数调用
.equals
而导致另一个错误。