更多Clojure怪异。我有这个功能,我正在尝试定义和调用。它有3个参数,但当我用3个参数调用它时,我得到
Wrong number of args (1) passed to: solr-query$correct-doc-in-results-QMARK-$fn
[Thrown class clojure.lang.ArityException]
当我用2个参数调用它时,我得到了
Wrong number of args (2) passed to: solr-query$correct-doc-in-results-QMARK-
[Thrown class clojure.lang.ArityException]
当我用4个参数调用它时,我得到了
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):
(correct-doc-in-results? "FLASHLIGHT" all-queries "60184")
任何人都知道发生了什么事吗?为什么我认为我在传递3时只传递1个参数,但在2或4时正确?我不是一个非常流利的clojure程序员,但定义一个函数是非常基本的。
答案 0 :(得分:15)
注意
之间的区别 solr-query$correct-doc-in-results-QMARK-
和
solr-query$correct-doc-in-results-QMARK-$fn
第一个引用你的函数correct-doc-in-results?
。后者指的是在该函数内定义的一些匿名函数。
如果你传递2或4个参数,你的顶层函数会出现错误,正如预期的那样。当你传递3个参数时,你会收到#(.equals docid)
的错误,因为#(.equals docid)
想要零参数但是得到一个。尝试将其更改为#(.equals % docid)
。