Скажем, у меня есть LazySeq из java.lang.Character, как
(\b \ \! \/ \b \ \% \1 \9 \/ \. \i \% \$ \i \space \^@)
Как я могу преобразовать это в String? Я пробовал очевидный
(String. my-char-seq)
но он бросает
java.lang.IllegalArgumentException: No matching ctor found for class java.lang.String (NO_SOURCE_FILE:0)
[Thrown class clojure.lang.Compiler$CompilerException]
Я думаю, потому что конструктор String ожидает примитивного char [] вместо LazySeq. Итак, я попробовал что-то вроде
(String. (into-array my-char-seq))
но он вызывает одно и то же исключение. Теперь проблема заключается в том, что в-массив возвращает java.lang.Character [] вместо примитивного char []. Это разочаровывает, потому что я фактически генерирую последовательность символов, подобную этой
(map #(char (Integer. %)) seq-of-ascii-ints)
В принципе у меня есть seq из int, представляющих символы ASCII; 65 = A и т.д. Вы можете видеть, что я явно использую функцию принуждения типа примитива (char x).
Это означает, что моя функция map возвращает примитив char, но функция Clojure map возвращает java.lang.Character.