Disons que j'ai un LazySeq de java.lang.Character comme
(\b \ \! \/ \b \ \% \1 \9 \/ \. \i \% \$ \i \space \^@)
Comment puis-je le convertir en une chaîne de caractères ? J'ai essayé les méthodes évidentes
(String. my-char-seq)
mais il jette
java.lang.IllegalArgumentException: No matching ctor found for class java.lang.String (NO_SOURCE_FILE:0)
[Thrown class clojure.lang.Compiler$CompilerException]
Je pense que parce que le constructeur String attend une primitive char[] au lieu d'un LazySeq . Alors j'ai essayé quelque chose comme
(String. (into-array my-char-seq))
mais il jette la même exception. Le problème maintenant est que en réseau renvoie un java.lang.Character[] au lieu d'une primitive char[] . C'est frustrant, car je génère en fait ma séquence de caractères comme ceci
(map #(char (Integer. %)) seq-of-ascii-ints)
En gros, j'ai une série d'ints représentant des caractères ASCII ; 65 = A, etc. Vous pouvez voir que j'utilise explicitement la fonction de coercition de type primitif (char x) .
Ce que cela signifie, c'est que mon carte renvoie une fonction primitive char mais le Clojure carte La fonction globale renvoie le java.lang.Character objet.