मल्टीलाइन स्ट्रिंग शाब्दिक के लिए वाक्य रचना क्या है?


135

मैं एक कठिन समय लगा रहा हूँ कि कैसे स्ट्रिंग वाक्यविन्यास जंग में काम करता है। विशेष रूप से, मैं यह पता लगाने की कोशिश कर रहा हूं कि मल्टीपल लाइन स्ट्रिंग कैसे बनाई जाए।


जवाबों:


173

सभी स्ट्रिंग शाब्दिक को कई लाइनों में तोड़ा जा सकता है; उदाहरण के लिए:

let string = "line one
line two";

एक दो लाइन स्ट्रिंग है, के रूप में एक ही "line one\nline two"(निश्चित रूप से एक \nnewline बच भी सीधे उपयोग कर सकते हैं )। यदि आप स्वरूपण कारणों से कई लाइनों में एक स्ट्रिंग को तोड़ना चाहते हैं तो आप नई लाइन और प्रमुख व्हाट्सएप से बच सकते हैं \; उदाहरण के लिए:

let string = "one line \
    written over \
    several";

के रूप में ही है "one line written over several"

यदि आप स्ट्रिंग में लाइनब्रीक चाहते हैं तो आप उन्हें निम्नलिखित में जोड़ सकते हैं \:

let string = "multiple\n\
              lines\n\
              with\n\
              indentation";

यह वैसा ही है "multiple\nlines\nwith\nindentation";


2
यदि केवल पठनीयता ही मुद्दा है, तो मैं concat!()दिए गए विकल्पों को पूरा करने के लिए मैक्रो जोड़ना चाहूंगा ( doc.rust-lang.org/std/macro.concat.html )
hakononakani

82

यदि आप कुछ लंबा करना चाहते हैं, जिसमें उद्धरण, बैकस्लैश आदि शामिल हो सकते हैं, तो कच्चे स्ट्रिंग शाब्दिक अंकन का उपयोग करें :

let shader = r#"
    #version 330

    in vec4 v_color;
    out vec4 color;

    void main() {
        color = v_color;
    };
"#;

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

let crazy_raw_string = r###"
    My fingers #"
    can#"#t stop "#"" hitting
    hash##"#
"###;

लेकिन ... आपको परिणाम में newlines नहीं चाहिए, और कच्चे तार उस के साथ मदद नहीं करते हैं, तो आप केवल newlines से बचने की जरूरत है।
पूल जू

कच्चे तार बस आपको हर पंक्ति के अंत में एक '\' जोड़ने से रोकते हैं यदि आप newlines के बारे में परवाह नहीं करते हैं (जैसे कि जब आप कोड एम्बेड कर रहे हैं जो कि shaline और गुठली की तरह newline अज्ञेय है) या, जैसा कि आपने ठग लिया है , जब newlines वास्तव में आवश्यक हैं। यह सिर्फ कोड को एम्बेड करना आसान बनाता है जिसे आप संपादित करना चाहते हैं और प्रत्येक पंक्ति के अंत में '\' से परेशान नहीं होना चाहिए। बस इतना ही।
c0g

1
यदि आप चाहते हैं (या मन में नहीं) परिणामी स्ट्रिंग में newlines, सादे डबल उद्धृत तार पूरी तरह से अच्छी तरह से करेंगे, जैसा कि अन्य उदाहरणों में दिखाया गया है। यदि आप नई कहानियों से बचना चाहते हैं, तो कच्चे तार अच्छे नहीं हैं। वे वास्तव में केवल तभी मदद करते हैं यदि पाठ में उद्धरण, बैकस्लैश आदि शामिल हैं - जैसा कि एम्बेडेड स्रोत में हो सकता है।
पूल जू

2
मैं देखता हूं कि आप अभी क्या कर रहे हैं और आप बिल्कुल सही हैं।
cgg

1
यह इन तारों को प्रिंट करने के आउटपुट को दिखाने में मदद करेगा। उत्तर से ही मैं यह नहीं बता सकता कि नई रूपरेखा के साथ क्या होगा, और इंडेंटेशन कैसे संभाला जाएगा।
bluenote10

48

हॉन का उत्तर सही है लेकिन अगर इंडेंटेशन आपको परेशान करता है, तो इंडोक का उपयोग करने पर विचार करें जो इंडेंटेड मल्टी-लाइन स्ट्रिंग्स के लिए एक प्रक्रियात्मक मैक्रो है। यह "इंडेंटेड डॉक्यूमेंट" के लिए है। यह एक मैक्रो प्रदान करता है जिसे indoc!()मल्टीलाइन स्ट्रिंग शाब्दिक लगता है और इसे इंडेंट करता है इसलिए सबसे बाईं ओर का गैर-स्पेस कैरेक्टर पहले कॉलम में है।

let s = indoc! {"
    line one
    line two
"};

परिणाम है "line one\nline two\n"

व्हॉट्सएप को दस्तावेज़ में सबसे बाईं ओर के गैर-अंतरिक्ष चरित्र के सापेक्ष संरक्षित किया गया है, इसलिए निम्न में से एक लाइन के सापेक्ष दो इंडेंटेड 3 रिक्त स्थान हैं:

let s = indoc! {"
    line one
       line two
"};

परिणाम है "line one\n line two\n"


8

यदि आप अपने कोड में बहुस्तरीय पाठ को इंडेंट करना चाहते हैं:

let s = "first line\n\
    second line\n\
    third line";

println!("Multiline text goes next:\n{}", s);

परिणाम निम्नलिखित होगा:

Multiline text goes next:
first line
second line
third line

कृपया स्पष्ट रूप से बताएं, गद्य का उपयोग करते हुए, कोड का कौन सा टुकड़ा इस व्यवहार के लिए महत्वपूर्ण है।
Shepmaster

अभी, यह स्वीकार किए गए उत्तर में कुछ भी नया नहीं जोड़ता है , जिसमें कहा गया है: नई लाइन से बच का उपयोग कर सकते \nहैं [...] आप नई लाइन और प्रमुख व्हाट्सएप से बच सकते हैं{backslash} । (यह एक टिप्पणी में कोड में एक बैकस्लैश टाइप करने के लिए बहुत मुश्किल है, ऐसा प्रतीत होता है।)
शेमपस्टर

2
यह टिप्पणी स्वीकार किए गए उत्तर में दो बिंदुओं को संयोजित करने का एक तरीका सुझा रही है: आप एक मल्टी-लाइन स्ट्रिंग का उत्पादन कैसे कर सकते हैं, जिसे कोड में गुणक रेखाओं के रूप में लिखा गया है, लेकिन एक ही समय में-शैलीगत या सुव्यवस्थित कारण के लिए अनुमति दी जाती है- प्राप्त करें कोड में अपना इंडेंटेशन, इस इंडेंटेशन के बिना अंतिम स्ट्रिंग में समाप्त होता है। यह पाठ में बहुत स्पष्ट नहीं है, लेकिन यह एक सामान्य उपयोग का मामला है और इस प्रकार एक मूल्यवान सुझाव है। (इस का टोकरा संस्करण के लिए dtolnay द्वारा जवाब देखें।)
दातो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.