رشتهها
حالا میتوانیم دو نوع رشتهای را در راست درک کنیم:
str&
تکهای از بایتهای رمزگذاریشده UTF-8، شبیه به[u8]&
است.String
is 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>"); }