2010-07-26 12 views
7

स्केला? स्केला में," डॉक्स यहाँ डॉक्स "शुरू कर रहा है और अंत 3 "कैसे उत्पादन "" "में" यहां "की

val str = """Hi,everyone""" 

में करने के लिए लेकिन क्या होगा अगर स्ट्रिंग """? कैसे करने के लिए होता है उत्पादन Hi,"""everyone?

उत्तर

9

के बाद से यूनिकोड बहु लाइन स्ट्रिंग शाब्दिक में \u0022 के माध्यम से बचने नहीं होगा आप मदद, क्योंकि वे बहुत ही तीन उद्धरण के रूप में मूल्यांकन किया जाएगा, अपने ही मौका तो जैसे जोड़ के लिए है:,

"""Hi, """+"""""""""+"""everyone""" 

अच्छी बात है कि स्केला संकलक करने के लिए पर्याप्त चतुर है इसे ठीक करें और इस प्रकार संकलन करते समय यह एक एकल स्ट्रिंग निकाल देगा।

कम से कम, scala -print कहता है।

object o { 
    val s = """Hi, """+"""""""""+"""everyone""" 
    val t = "Hi, \"\"\"everyone" 
} 

और फिर भी का उपयोग कर scala -print

Main$$anon$1$o.this.s = "Hi, """everyone"; 
Main$$anon$1$o.this.t = "Hi, """everyone"; 

ध्यान दें, कि आप इसे इस तरह से इनपुट नहीं कर सकता। प्रारूप जो scala -print आउटपुट केवल आंतरिक उपयोग के लिए प्रतीत होता है।

फिर भी, ऐसा करने का कुछ आसान, अधिक सरल तरीका हो सकता है।

2

आप कर सकते हैं नहीं

स्केला heredocs कच्चे तार कर रहे हैं और अगर आप एक स्ट्रिंग उपयोग स्ट्रिंग-संयोजन में ट्रिपल उद्धरण की जरूरत है उन्हें जोड़ने किसी भी मुक्ति कोड का उपयोग नहीं करते

+0

कोई बच निकलने वाले पात्र नहीं हैं? वह '/"/"/" 'नहीं कर सका? – wheaties

+0

नहीं, हेड्रोक स्ट्रिंग में \ "/ जोड़ने से पहले \"/स्ट्रिंग में जोड़ने से पहले, लेकिन आप सामान्य स्ट्रिंग –

2

जहां तक ​​मुझे पता है, आप ट्रिपल कोट्स का उपयोग नहीं कर सकते। कल्पना में, खंड 1.3.5, राज्यों:

एक बहु लाइन स्ट्रिंग शाब्दिक ट्रिपल कोट्स में "" "..." "" संलग्न वर्णों का एक क्रम है। वर्णों का अनुक्रम मनमाने ढंग से है, सिवाय इसके कि इसमें केवल तीन अंत में तीन या अधिक अनुवांशिक उद्धरण वर्ण हो सकते हैं। अक्षरों को आवश्यक रूप से प्रिंट करने योग्य नहीं होना चाहिए; न्यूलाइन या अन्य नियंत्रण पात्रों की भी अनुमति है। यूनिकोड हर जगह काम से बच निकलता है, लेकिन (§1.3.6) में भागने के दृश्यों में से कोई भी व्याख्या नहीं किया गया है।

तो अगर आप एक स्ट्रिंग में तीन उद्धरण उत्पादन करना चाहते हैं, तो आप अभी भी एकल उद्धरण स्ट्रिंग एस्केपिंग के साथ उपयोग कर सकते हैं:


scala> val s = "Hi, \"\"\"everyone" 
s: java.lang.String = Hi, """everyone 
+0

में "बच सकते हैं" आप यूनिकोड एस्केप अनुक्रम का भी उपयोग कर सकते हैं। –

+0

तो, हेरेडोक में ऐसा करने का कोई तरीका नहीं है। मुझे समझ में नहीं आता क्यों स्कैला इसका समर्थन नहीं करता है। – Freewind

+0

@ भौगोलिक: यदि आप एक बहु पंक्ति स्ट्रिंग के भीतर तीन उद्धरण वर्णों को यूनिकोड करते हैं तो वह अभी भी काम नहीं करेगा। इसे अभी भी बहु-पंक्ति स्ट्रिंग के अंत के रूप में व्याख्या किया जाएगा –

5

यह एक पूरी तरह से हैक है कि मैं posted on a similar question, लेकिन यह यहां भी काम करता है: स्कैला के एक्सएमएल संरचनाओं को मध्यवर्ती प्रारूप के रूप में उपयोग करें।

val str = <a>Hi,"""everyone</a> text 

यह आपको तीन डबल उद्धरण चिह्नों के साथ एक स्ट्रिंग देगा।

+0

यह बहुत उपयोगी है, धन्यवाद – Freewind

+0

निश्चित बात। मुझे कहना है, मैं इसके साथ खुश हूं। ;-) – pr1001

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