2015-10-25 7 views
5

कुछ भाषाओं में यह इस तरह का कुछ लिखने के लिए संभव है:मल्टी लाइन स्ट्रिंग

val some_string = 
    """First line. 
    | Second line, with leading space.""" 

है, एक बहु लाइन स्ट्रिंग जहां सभी प्रमुख अंतरिक्ष एक अप करने के लिए निकाल दिया जाता है बिंदु, लेकिन आगे नहीं। इसे लिखकर जंग में नकल किया जा सकता है:

let some_string = 
    "First line.\n \ 
    Second line, with leading space."; 

हालांकि, यह वास्तविक आउटपुट के करीब देखने का लाभ खो देता है। उदाहरण छद्मोकोड जैसे कुछ लिखने के जंग में कोई रास्ता है, (कुछ) अग्रणी व्हाइटस्पेस को संरक्षित करना?

उत्तर

4

नहीं यह संभव नहीं है (v1.3 और शायद लंबे समय तक)।

हालांकि, आमतौर पर मल्टी-लाइन स्ट्रिंग अक्षर जिन्हें मानव-पठनीय होने की आवश्यकता होती है, कुछ प्रकार के निरंतर विवरण होते हैं, जैसे कि सीएलआई प्रोग्राम के लिए उपयोग स्ट्रिंग। आप अक्सर इस तरह इंडेंट किए गए चीजों को देखते हैं:

const USAGE: &'static str = " 
Naval Fate. 

Usage: 
    ... 
"; 

मुझे लगता है कि ठीक है। यदि आपके पास बहुत से तार हैं या वास्तव में एक बड़ा है, तो आप include_str! का उपयोग कर सकते हैं।

3

यह जंग के रूप में भाषा द्वारा समर्थित नहीं है 1.7 लेकिन Indoc एक प्रक्रियात्मक मैक्रो है जो आप चाहते हैं। यह "इंडेंट दस्तावेज" के लिए खड़ा है। यह indoc!() नामक एक मैक्रो प्रदान करता है जो एक मल्टीलाइन स्ट्रिंग को शाब्दिक और अन-इंडेंट्स लेता है ताकि बाएं सबसे नॉन-स्पेस कैरेक्टर पहले कॉलम में हो।

let some_string = indoc!(" 
    First line. 
    Second line, with leading space."); 

यह कच्चे स्ट्रिंग अक्षर के लिए भी काम करता है।

let some_string = indoc!(r#" 
    First line. 
    Second line, with leading space."#); 

परिणाम दोनों ही मामलों में "First line\n Second line, with leading space."

+0

यह स्टैक ओवरफ़्लो पर उम्मीद है कि आप संबद्धता की घोषणा जब आप एक उपकरण या लाइब्रेरी आपके द्वारा बनाए गए बढ़ावा दे रहे हैं है। – Shepmaster

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