のようなjava.lang.CharacterのLazySeqがあるとしましょう
(\b \ \! \/ \b \ \% \1 \9 \/ \. \i \% \$ \i \space \^@)
これを文字列に変換するにはどうすればよいですか? 私は明らかなことを試しました
(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 コンストラクターがLazySeqの代わりにプリミティブchar[]を期待しているためだと思います。それで、私は次のようなことを試しました
(String. (into-array my-char-seq))
しかし、それは同じ例外をスローします。現在の問題は、into-arrayがプリミティブchar[ ] ではなくjava.lang.Character[]を返すことです。私は実際にこのような文字シーケンスを生成するので、これはイライラします
(map #(char (Integer. %)) seq-of-ascii-ints)
基本的に、ASCII 文字を表す int のシーケンスがあります。65 = A など。プリミティブ型強制関数(char x)を明示的に使用していることがわかります。
これが意味することは、マップ関数はプリミティブcharを返しているが、Clojureマップ関数は全体としてjava.lang.Characterオブジェクトを返しているということです。