2013-01-14 10 views
5

के साथ विफल निम्नलिखित कॉल:Clojure :: (स्ट्रिंग/प्रारूप "% s" "एक") :: ClassCastException

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

... फेंकता एक "ClassCastException java.lang.String में ढाला नहीं जा सकता क्लोजर में [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' का उपयोग करने के लिए +1 – Alex

3

[एल का मतलब है "मैं सरणी चाहता हूं" तो (String/format "%s" (to-array "a")) का उपयोग करें। सामान्य वाक्यविन्यास: (to-array ["a" 42 0.666]).

4

String.format varargs का उपयोग कर रहा है, जो आंतरिक रूप से सादे जावा सरणी हैं। फिर आपको इनपुट पैरामीटर को सरणी में परिवर्तित करने की आवश्यकता है, उदा। to-array का उपयोग करके: जावा एपीआई में

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

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^