2011-10-10 18 views
7

क्या स्कैला में स्ट्रिंग इंटरपोलेशन के लिए एक छोटा वाक्यविन्यास है? कुछ की तरह:स्कैला में स्ट्रिंग.फॉर्मैट के लिए छोटा

"my name is %s" < "jhonny" 

के बजाय

"my name is %s" format "jhonny" 
+1

आप के लिए नई vocab शब्द: स्ट्रिंग प्रक्षेप (मैं हाल ही में अपने आप को पता चला कि एक)। –

+0

ओह, धन्यवाद। मैं इसे प्रश्न में जोड़ दूंगा। –

+1

हाँ मुझे यह भी मिला: http://stackoverflow.com/questions/2481459/why-is-there-no-string-interpolation-in-scala –

उत्तर

9

नहीं है, लेकिन आप इसे अपने आप को जोड़ सकते हैं:

scala> implicit def betterString(s:String) = new { def %(as:Any*)=s.format(as:_*) } 
betterString: (s: String)java.lang.Object{def %(as: Any*): String} 

scala> "%s" % "hello" 
res3: String = hello 

ध्यान दें कि आप < उपयोग नहीं कर सकते, क्योंकि वह एक के साथ संघर्ष होगा प्रीडिफ में पहले से परिभाषित विभिन्न निहित रूपांतरण।

3

मुझे याद है कि मार्टिन ओडर्स्की को यह बताते हुए उद्धृत किया गया है कि "प्रोग्रामिंग इन स्कैला" में प्रस्तुत शैली में स्ट्रिंग कॉन्सटेनेशन इंटरपोलेशन के लिए उपयोगी अनुमान है। विचार यह है कि रिक्त स्थान के बिना आप केवल प्रतिस्थापन के कुछ अतिरिक्त वर्णों का उपयोग कर रहे हैं। उदाहरण के लिए:

val x  = "Mork" 
val y  = "Ork" 

val intro = "my name is"+x+", I come from "+y 

प्रारूप विधि हालांकि बहुत अधिक शक्ति प्रदान करती है। डैनियल सोब्राल ने regex based तकनीक पर भी ब्लॉग किया है।

+0

concatenation के साथ समस्या यह है कि कभी-कभी आप पूरी स्ट्रिंग के लिए 'व्यू' खो देते हैं। जैसे "% s: //% s" प्रारूप (प्रोटोकॉल, होस्ट) मेरे लिए क्लीनर दिखता है। –

4

मामले में आप सोच रहे हैं कि क्या वाक्य रचना काम करता है

$ ./scala -nobootcp -Xexperimental 
Welcome to Scala version 2.10.0.r25815-b20111011020241 

scala> val s = "jhonny" 
s: String = jhonny 

scala> "my name is \{ s }" 
res0: String = my name is jhonny 

कुछ और बजाना में हो सकता है:

scala> "those things \{ "ne\{ "ts".reverse }" }" 
res9: String = those things nest 

scala> println("Hello \{ readLine("Who am I speaking to?") }") 
Who am I speaking to?[typed Bozo here]Hello Bozo 
संबंधित मुद्दे