2013-01-14 2 views
5

den folgenden Aufruf:Clojure :: (String/Format "% s" "a") :: schlägt mit Classcast

(String/format "%s" "a") 

... wirft ein „Classcast java.lang.String kann nicht gegossen werden [Ljava.lang.Object "Ausnahme in Clojure.

(String/format "%s" (cast Object "a")) 

.... erzeugt die gleiche Ausnahme.

+1

Gibt es Gründe, die Sie verwenden müssen verwenden 'String.format' und nicht [Clojure.core/format] (https://github.com/clojure /clojure/blob/master/src/clj/clojure/core.clj#L5162) - Wraps mit 'to-array' für dich? '(Format"% s "" a ")' – Kyle

+0

Kein Grund, String.format insbesondere zu verwenden, nur neugierig zu sein ... –

Antwort

14

Da letzte Argument in Java API ist Object[] Array anstelle von Object.

Rufen Sie einfach (String/format "%s" (into-array ["a"]))

Aber mehr idiomatische (format "Hello %s" "world")

+0

+1 zu verwenden 'format' von clojure.core – Alex

3

[L bedeutet "Ich möchte Array" verwenden Sie also (String/format "%s" (to-array "a")). Allgemeine Syntax: (to-array ["a" 42 0.666]).

4

String.format ist Varargs, die intern plain Java-Arrays sind. Sie müssen dann die Eingabeparameter in ein Array konvertieren, z. durch Verwendung von to-array:

user=> (String/format "%s" (to-array "a")) 
"a"