2013-01-14 85 views
5

以下電話:的Clojure ::(字符串/格式 「%S」 「A」)::失敗,並拋出ClassCastException

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

...拋出一個「ClassCastException異常java.lang.String中不能被強制轉換爲Clojure中的[Ljava.lang.Object]異常。

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

....產生相同的異常。

+1

你需要使用'String.format'而不是[Clojure.core /格式(https://github.com/clojure任何理由/clojure/blob/master/src/clj/clojure/core.clj#L5162) - 它爲你包裝了「數組」嗎? '(格式「%s」「a」)' – Kyle

+0

沒有理由特別使用String.format,只是很好奇...... –

回答

14

因爲最後一個參數是陣列Object[]代替Object

只需撥打(String/format "%s" (into-array ["a"]))

但更地道使用(format "Hello %s" "world")

+0

+1使用clojure.core中的'format' – Alex

3

[L表示「我想要數組」,所以使用(String/format "%s" (to-array "a"))。一般語法:(to-array ["a" 42 0.666]).

4

String.format正在使用可變參數,它們是內部普通的Java數組。然後你需要將輸入參數轉換成一個數組,例如通過使用to-array:在Java API

user=> (String/format "%s" (to-array "a")) 
"a" 
相關問題