J'utilise cette fonction pour écrire dans un fichier de Clojure.
IllegalArgumentException No matching method found: write for class java.io.BufferedWriter in clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:79)
3 Réponses :
passer par le message d'exception, les lignes ne sont pas une SEQ de chaînes, intenses (caractères) ou des tableaux d'int. p>
Essayez ceci:
(defn writelines [file-path lines]
(with-open [wtr (clojure.java.io/writer file-path)]
(binding [*out* wtr]
(doseq [line lines] (print wtr line)))))
Tout d'abord, votre fonction fonctionne parfaitement pour de nombreuses entrées: Cependant, lorsque vous essayez de transmettre quelque chose d'étrange, nous obtenons l'erreur que vous décrivez: P> user=> (writelines "quux" [#{1}])
IllegalArgumentException No matching method found: write for class java.io.BufferedWriter clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:79)
Remarque: Si vous souhaitez limiter une valeur de clojure imbriquée arbitraire, il est préférable d'utiliser pr-str code> plutôt que str code>. Si la chaîne résultante est dirigée directement vers un flux, vous devez utiliser PR code> (ou prn code>) au lieu des deux étapes pr-str code> suivi par Imprimer code> ou .write code>.
Pourriez-vous, pour plus de clarté, ajoutez un exemple d'appel de fonction dans votre question? Il est susceptible de confirmer la réponse d'Opqdonut.
Pas une réponse à votre question, mais pourrait être intéressant dans ce contexte: Stackoverflow.com/Questtions/7756909/...