Скажем, у меня есть LazySeq из java.lang.Character какКак преобразовать LazySeq символов в строку в Clojure?
(\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]
Я думаю, потому что конструктор Струнный ожидает примитивный символ [] вместо LazySeq. Итак, я попробовал что-то вроде
(String. (into-array my-char-seq))
, но это исключение. Проблема в том, что в-массив возвращает java.lang.Character [] вместо примитива char []. Это разочарование, потому что я на самом деле генерировать свою последовательность символов, как этот
(map #(char (Integer. %)) seq-of-ascii-ints)
В принципе у меня есть след от Интс, представляющих ASCII символов; 65 = A и т. Д. Вы можете видеть, что я явно использую функцию принуждения типа примитива (char x).
Что это означает, что моя карты функция возвращает примитивный символ но Clojure карты функции в целом возвращается в java.lang.Character объекта.