মরিচ 1.0 এর জন্য আপডেট হয়েছে
আপনি কোনও &'static strথেকে অর্জন করতে পারবেন না Stringকারণ Stringআপনার প্রোগ্রামের পুরো জীবন ধরে না থাকতে পারে এবং &'staticআজীবন এর অর্থ। আপনি Stringএটি থেকে নিজের জীবনকাল দ্বারা প্যারামিটারাইজড কেবল একটি স্লাইস পেতে পারেন ।
একটি Stringথেকে স্লাইসে যেতে &'a strআপনি স্লাইসিং সিনট্যাক্স ব্যবহার করতে পারেন:
let s: String = "abcdefg".to_owned();
let s_slice: &str = &s[..];
বিকল্পভাবে, আপনি একটি বাস্তব পুনর্বিবেচনার Stringপ্রয়োগ Deref<Target=str>এবং সম্পাদন করেন এমন সত্যটি ব্যবহার করতে পারেন :
let s_slice: &str = &*s;
আরও একটি উপায় রয়েছে যা আরও সংক্ষিপ্ত সিনট্যাক্সের অনুমতি দেয় তবে এটি কেবল তখনই ব্যবহার করা যেতে পারে যখন সংকলক পছন্দসই লক্ষ্য প্রকারটি নির্ধারণ করতে সক্ষম হয় (উদাহরণস্বরূপ ফাংশন আর্গুমেন্টে বা স্পষ্টত টাইপযুক্ত ভেরিয়েবল বাইন্ডিংগুলিতে)। একে ডেরেফ কোর্সিওন বলা হয় এবং এটি কেবল &অপারেটর ব্যবহারের অনুমতি দেয় এবং সংকলক স্বয়ংক্রিয়ভাবে *প্রসঙ্গের ভিত্তিতে একটি উপযুক্ত পরিমাণ সন্নিবেশ করবে :
let s_slice: &str = &s;
fn take_name(name: &str) { ... }
take_name(&s);
let not_correct = &s;
লক্ষ্য করুন এই প্যাটার্ন জন্য অনন্য নয় String/ &str- আপনি যার মাধ্যমে সংযুক্ত আছেন ধরনের প্রতিটি যুগল সঙ্গে এটি ব্যবহার করতে পারেন Deref, উদাহরণস্বরূপ, সঙ্গে CString/ CStrএবং OsString/ OsStrথেকে std::ffiমডিউল বা PathBuf/ Pathথেকে std::pathমডিউল।
'staticজীবদ্দশায় বোঝা যাচ্ছে স্ট্রিংটি কখনও ক্ষয় করা হবে না, অর্থাত মেমরি ফুটো। কিছু উপযুক্তের&'static strপরিবর্তে আপনার প্রয়োজন কেন ?&'a str'a