Неправильное количество аргументов, переданных функции 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-
[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))))
и вот как я пытаюсь это назвать (из REPL с использованием swank в emacs):
(correct-doc-in-results? "FLASHLIGHT" all-queries "60184")
Кто-нибудь знает, что происходит? Почему он думает, что я передаю только один аргумент, когда я прохожу 3, но правильно ли это получается для 2 или 4? Я еще не очень беглый программист Clojure, но определение функции довольно элементарно.
Ответы
Ответ 1
Обратите внимание на разницу между
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)
.