Więcej dziwności Clojure. Mam tę funkcję, którą próbuję zdefiniować i zadzwonić. Posiada 3 argumenty, ale gdy zgłoszę go z 3 argumenty mamUzyskanie błędnej liczby argumentów przekazanych do funkcji Clojure
Wrong number of args (1) passed to: solr-query$correct-doc-in-results-QMARK-$fn
[Thrown class clojure.lang.ArityException]
gdy zgłoszę go z 2 argumentami mam
Wrong number of args (2) passed to: solr-query$correct-doc-in-results-QMARK-
[Thrown class clojure.lang.ArityException]
i gdy zgłoszę go z 4 argumentów mogę
Wrong number of args (4) passed to: solr-query$correct-doc-in-results-QMARK-
[Thrown class clojure.lang.ArityException]
tutaj jest definicja funkcji:
(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))))
i tutaj jest jak próbuję to nazwać (od REPL przy użyciu Swank w emacs):
(correct-doc-in-results? "FLASHLIGHT" all-queries "60184")
ktoś ma jakiś pomysł co się dzieje? Dlaczego wydaje mi się, że przechodzę tylko 1 argument, gdy przechodzę 3, ale dostaje to prawo dla 2 lub 4? Nie jestem jeszcze bardzo biegły programista clojure, ale określenie funkcji jest dość podstawowe.
Oczywiście. Dzięki za proste wyjaśnienie. –
@Brian faktycznie jest to błąd, ponieważ anonimowa funkcja chce zerowych argumentów (nie ma%) i otrzymuje jeden, gdy zostanie wywołana przez 'some'. Oczywiście, jeśli funkcja faktycznie * została * wywołana bez żadnych argumentów, spowodowałaby kolejny błąd, próbując wywołać '.equals' z tylko jednym argumentem. – amalloy
Masz rację, będę edytować moją odpowiedź. –