رشتهها
حالا میتوانیم دو نوع رشتهای را در راست درک کنیم:
str&تکهای از بایتهای رمزگذاریشده UTF-8، شبیه به[u8]&است.Stringis an owned buffer of UTF-8 encoded bytes, similar toVec<T>.
fn main() { let s1: &str = "دنیا"; println!("s1: {s1}"); let mut s2: String = String::from("سلام"); println!("s2: {s2}"); s2.push_str(s1); println!("s2: {s2}"); let s3: &str = &s2[s2.len() - s1.len()..]; println!("s3: {s3}"); }
-
&strیک برش رشتهای را معرفی میکند، که یک مرجع غیرقابل تغییر به دادههای رشتهای رمزشده UTF-8 است که در یک بلوک حافظه ذخیره شده است. لیترال های رشتهایString(”Hello”) در باینری برنامه ذخیره میشوند. -
در راست نوع
Stringیک wrapper بر روی یک بردار از بایتهاست. مانندVec<T>، یک نوع Owned است. -
مانند بسیاری از انواع دیگر،
String::from()یک رشته از یک لیترال رشته ایجاد میکند.String::new()که رشته خالی جدید ایجاد میکند که داده های رشتهای میتوانند با استفاده از متدهایpush()وpush_str()به آن اضافه شوند. -
ماکرو
format!()یک راه راحت برای ایجاد یک رشته Owned از مقادیر پویا است. مثل فرمت قابل پذیرش توسط ماکروprintln!()است. -
میتوانید برشهای
&strرا ازStringاز طریق&و انتخابی محدوده انتخاب کنید. اگر محدوده بایتی را انتخاب کنید که با مرزهای نویسه تراز نباشد، عبارت وحشت می کند. تکرار کنندهcharsروی کاراکترها تکرار می شود و بر تلاش برای درست کردن مرزهای کاراکتر ترجیح داده می شود. -
برای برنامهنویسان
C++:&strرا به عنوانconst char*درC++درنظر بگیرید، اما یک فرق مهم این است که در راست که همیشه به یک رشته معتبر در حافظه اشاره می کند. راست نوعStringمعادل تقریبیstd::stringدرC++است (با این تفاوت که فقط میتواند حاوی بایتهای رمزشده UTF-8 باشد و هرگز از بهینهسازی Small-String استفاده نمی کند). -
رشتههای بایت به شما امکان میدهند مستقیماً یک مقدار
&[u8]ایجاد کنید:fn main() { println!("{:?}", b"abc"); println!("{:?}", &[97, 98, 99]); } -
رشتههای خام به شما امکان می دهند یک مقدار
&strبا غیرفعال کردن فرارها ایجاد کنید:r"\n" == "\\n".شما میتوانید با استفاده از تعداد برابر#در دو طرف دابلکوت دابلکوتها، دابلکوتها را جاسازی کنید:fn main() { println!(r#"<a href="link.html">link</a>"#); println!("<a href=\"link.html\">link</a>"); }