Подтвердить что ты не робот

Неправильное количество аргументов, переданных функции 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, но определение функции довольно элементарно.

4b9b3361

Ответ 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).