একাধিক স্ট্রিং আক্ষরিক জন্য সিনট্যাক্স কি?


135

মরিচায় স্ট্রিং সিনট্যাক্স কীভাবে কাজ করে তা নির্ণয় করতে আমার খুব কষ্ট হচ্ছে। বিশেষত, আমি কীভাবে একাধিক লাইনের স্ট্রিং তৈরি করতে পারি তা বোঝার চেষ্টা করছি।


উত্তর:


173

সমস্ত স্ট্রিং আক্ষরিক বিভিন্ন লাইন জুড়ে ভেঙে যেতে পারে; উদাহরণ স্বরূপ:

let string = "line one
line two";

একটি দুটি লাইনের স্ট্রিং, একইরূপে "line one\nline two"(অবশ্যই কেউ \nসরাসরি নিউলাইন এস্কেপও ব্যবহার করতে পারে )। আপনি যদি বিন্যাসের কারণে একাধিক লাইন জুড়ে কেবল একটি স্ট্রিং ভাঙতে চান তবে আপনি নিউলাইন এবং শীর্ষস্থানীয় হোয়াইটস্পেসকে একটি দিয়ে এড়াতে পারবেন \; উদাহরণ স্বরূপ:

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##"#
"###;

তবে ... আপনি যদি নতুন ফলগুলি ফলাফলটিতে না চান তবে কেবল নতুন লাইনের হাত থেকে বাঁচতে হবে এবং কাঁচা স্ট্রিংগুলি এতে সহায়তা করে না।
পুলি

কাঁচা স্ট্রিংগুলি আপনাকে প্রতিটি লাইনের শেষে '\' যুক্ত করা থেকে বিরত রাখে যদি আপনি নিউলাইনগুলি (যেমন শেডার এবং কার্নেলের মতো নিউলাইন অগ্নিগর্ভর কোডটি এম্বেড করছেন তখন) বা যেমন আপনি চিহ্নিত করেছেন যাও, যখন নিউলাইনগুলি আসলে প্রয়োজনীয়। এটি কেবল কোড এম্বেড করা সহজ করে দেয় যা আপনি সম্পাদনা করতে চাইতে পারেন এবং প্রতিটি লাইনের শেষে '\' নিয়ে ঝামেলা করতে হবে না। এখানেই শেষ.
c0g

1
আপনি যদি ফলাফলের স্ট্রিংয়ে নিউলাইনগুলি (বা কিছু মনে করেন না) চান তবে সরল ডাবল উদ্ধৃত স্ট্রিংগুলি পুরোপুরি ভাল করবে, যেমন অন্যান্য উদাহরণগুলিতে দেখানো হয়েছে। আপনি যদি নিউলাইনগুলি এড়াতে চান তবে কাঁচা স্ট্রিং ভাল নয়। এম্বেড উত্সে যেমন হতে পারে - পাঠ্যে যদি কোটস, ব্যাকস্ল্যাশ ইত্যাদি অন্তর্ভুক্ত থাকে তবে তারা সত্যই সহায়তা করে।
পুলি

2
আমি দেখতে পাচ্ছি আপনি এখন কী পাচ্ছেন এবং আপনি একেবারে ঠিক।
c0g

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

কোডটির কোন অংশটি এই আচরণের জন্য গুরুত্বপূর্ণ তা দয়া করে স্পষ্ট করে গদ্য ব্যবহার করুন state
শেপমাস্টার

এই মুহুর্তে, এটি গ্রহণযোগ্য উত্তরে নতুন কিছু যুক্ত করবে না বলে মনে হচ্ছে , যা বলে: যে কেউ \nনিউলাইন এস্কেপ ব্যবহার করতে পারে [...] আপনি নিউলাইন এবং শীর্ষস্থানীয় সাদা স্থানকে একটি দিয়ে পালাতে পারেন{backslash} । (কোনও মন্তব্যে কোডে ব্যাকস্ল্যাশ টাইপ করা খুব কঠিন, এটি উপস্থিত হয়))
শেপমাস্টার

2
এই মন্তব্যটি গৃহীত উত্তরের দুটি পয়েন্ট একত্রিত করার একটি উপায়ের পরামর্শ দিচ্ছে: আপনি কীভাবে একাধিক-লাইন স্ট্রিং উত্পাদন করতে পারেন, কোডে বহুগুণ হিসাবে চিহ্নিত, তবে একই সাথে স্টাইলিস্টিক বা সুসংগঠনের কারণ হিসাবে অনুমোদিত হতে পারে - চূড়ান্ত স্ট্রিংয়ের শেষ না হওয়াতে এই ইন্ডেন্টেশনটি কোড ছাড়াই কোডের নিজস্ব ইন্ডেন্টেশন। এটি পাঠ্যে খুব স্পষ্ট করে বলা হয়নি, তবে এটি একটি সাধারণ ব্যবহারের কেস এবং সুতরাং একটি মূল্যবান পরামর্শ ইমো। (এর ক্রেট সংস্করণটির জন্য dtolnay এর উত্তর দেখুন))
দাতো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.