Получение неверного числа аргументов, переданных функции Clojure - PullRequest
10 голосов
/ 27 октября 2011

Больше странностей 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")

У кого-нибудь есть идеи, что происходит? Почему мне кажется, что я передаю только 1 аргумент, когда я передаю 3, но принимает это правильно для 2 или 4? Я еще не очень хорошо знаю программист, но определение функции довольно простое.

1 Ответ

15 голосов
/ 27 октября 2011

Обратите внимание на разницу между

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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...