Altre stranezze Clojure. Ho questa funzione che sto cercando di definire e chiamare. Dispone di 3 argomenti, ma quando io lo chiamo con 3 argomenti ottengoNumero errato di argomenti passati a una funzione Clojure
Wrong number of args (1) passed to: solr-query$correct-doc-in-results-QMARK-$fn
[Thrown class clojure.lang.ArityException]
quando lo chiamo io con 2 argomenti ricevo
Wrong number of args (2) passed to: solr-query$correct-doc-in-results-QMARK-
[Thrown class clojure.lang.ArityException]
e quando io lo chiamo con 4 argomenti ottengo
Wrong number of args (4) passed to: solr-query$correct-doc-in-results-QMARK-
[Thrown class clojure.lang.ArityException]
qui è la definizione della funzione:
(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))))
e ecco come sto cercando di chiamare (dal REPL utilizzando Swank in emacs):
(correct-doc-in-results? "FLASHLIGHT" all-queries "60184")
Qualcuno ha idea di cosa sta succedendo? Perché pensa che sto passando solo 1 argomento quando passo 3, ma lo faccio bene per 2 o 4? Non sono ancora un programmatore di clojure molto fluente, ma definire una funzione è piuttosto semplice.
Naturalmente. Grazie per la semplice spiegazione. –
@Brian in realtà l'errore è perché la funzione anonima vuole zero args (non ha%) e ne riceve uno quando viene chiamata da 'some'. Naturalmente, se la funzione in realtà * fosse * chiamata senza argomenti, allora causerebbe un altro errore cercando di chiamare '.equals' con un solo argomento. – amalloy
Hai ragione, modificherò la mia risposta. –