মরিচায় স্ট্রিং সিনট্যাক্স কীভাবে কাজ করে তা নির্ণয় করতে আমার খুব কষ্ট হচ্ছে। বিশেষত, আমি কীভাবে একাধিক লাইনের স্ট্রিং তৈরি করতে পারি তা বোঝার চেষ্টা করছি।
মরিচায় স্ট্রিং সিনট্যাক্স কীভাবে কাজ করে তা নির্ণয় করতে আমার খুব কষ্ট হচ্ছে। বিশেষত, আমি কীভাবে একাধিক লাইনের স্ট্রিং তৈরি করতে পারি তা বোঝার চেষ্টা করছি।
উত্তর:
সমস্ত স্ট্রিং আক্ষরিক বিভিন্ন লাইন জুড়ে ভেঙে যেতে পারে; উদাহরণ স্বরূপ:
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";
concat!()
প্রদত্ত বিকল্পগুলি সম্পূর্ণ করতে ম্যাক্রো যুক্ত করতে চাই ( doc.rust-lang.org/std/macro.concat.html )
আপনি কিছুটা দীর্ঘতর কিছু করতে চাইলে এর মধ্যে উদ্ধৃতি, ব্যাকস্ল্যাশস ইত্যাদি অন্তর্ভুক্ত থাকতে পারে বা না থাকতে পারে, কাঁচা স্ট্রিংয়ের আক্ষরিক স্বরলিপি ব্যবহার করা যেতে পারে :
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##"#
"###;
হুনের উত্তরটি সঠিক তবে যদি ইন্ডেন্টেশন আপনাকে বিরক্ত করে, ইন্ডোক ব্যবহার করা বিবেচনা করুন যা ইন্টেন্টেড মাল্টি-লাইন স্ট্রিংগুলির জন্য একটি প্রক্রিয়াগত ম্যাক্রো। এটি "ইন্ডেন্টড ডকুমেন্ট" হিসাবে দাঁড়িয়েছে। এটি ম্যাক্রো নামক একটি ম্যাক্রো সরবরাহ করে যা 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"
।
আপনি যদি আপনার কোডটিতে মাল্টলাইন পাঠ্য যুক্ত করতে চান তবে:
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
\n
নিউলাইন এস্কেপ ব্যবহার করতে পারে [...] আপনি নিউলাইন এবং শীর্ষস্থানীয় সাদা স্থানকে একটি দিয়ে পালাতে পারেন{backslash}
। (কোনও মন্তব্যে কোডে ব্যাকস্ল্যাশ টাইপ করা খুব কঠিন, এটি উপস্থিত হয়))