7
votes

Écrire dans un fichier à Clojure

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)


2 commentaires

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


3 Réponses :


0
votes

passer par le message d'exception, les lignes ne sont pas une SEQ de chaînes, intenses (caractères) ou des tableaux d'int.


0 commentaires

2
votes

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


0 commentaires

17
votes

Tout d'abord, votre fonction fonctionne parfaitement pour de nombreuses entrées: xxx pré>

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)


1 commentaires

Remarque: Si vous souhaitez limiter une valeur de clojure imbriquée arbitraire, il est préférable d'utiliser pr-str plutôt que str . Si la chaîne résultante est dirigée directement vers un flux, vous devez utiliser PR (ou prn ) au lieu des deux étapes pr-str suivi par Imprimer ou .write .