String

String یک رشته قابل رشد با کدگذاری UTF-8 است:

fn main() {
    let mut s1 = String::new();
    s1.push_str("سلام");
    println!("s1: len = {}, capacity = {}", s1.len(), s1.capacity());

    let mut s2 = String::with_capacity(s1.len() + 1);
    s2.push_str(&s1);
    s2.push('!');
    println!("s2: len = {}, capacity = {}", s2.len(), s2.capacity());

    let s3 = String::from("🇨🇭");
    println!("s3: len = {}, number of chars = {}", s3.len(), s3.chars().count());
}

String پیاده‌سازی‌کننده Deref<Target = str> است، که به این معناست که می‌توانید تمام متدهای str را بر روی String فراخوانی کنید.

This slide should take about 5 minutes.
  • String::new یک رشته جدید خالی برمی‌گرداند. از String::with_capacity استفاده کنید زمانی که می‌دانید چقدر داده می‌خواهید به رشته اضافه کنید.
  • String::len اندازه رشته String را به‌صورت بایت برمی‌گرداند (که ممکن است با طول آن به‌صورت کاراکتر متفاوت باشد).
  • String::chars یک تکرارگر (iterator) از روی کاراکترهای واقعی برمی‌گرداند. توجه داشته باشید که یک char ممکن است با آنچه که یک انسان به عنوان "کاراکتر" در نظر می‌گیرد، متفاوت باشد به دلیل grapheme clusters.
  • زمانی که مردم به رشته‌ها اشاره می‌کنند، ممکن است منظورشان str& یا String باشد.
  • زمانی که یک تایپ، <Deref<Target = T را پیاده‌سازی می‌کند، کامپایلر به شما این امکان را می‌دهد که به‌طور شفاف متدهای T را فراخوانی کنید.
    • ما هنوز Deref trait را بررسی نکرده‌ایم، بنابراین در این مرحله این بیشتر توضیح‌دهنده ساختار نوار کناری در مستندات است.
    • String پیاده‌سازی‌کننده <Deref<Target = str است که به‌طور شفاف دسترسی به متدهای str را فراهم می‌کند.
    • ;()let s3 = s1.deref و ;let s3 = &*s1 بنویسید و مقایسه کنید .
  • بنویسید و مقایسه کنید let s3 = s1.deref(); و let s3 = &*s1;.
  • راه‌های مختلف برای ایندکس‌گذاری یک String را مقایسه کنید:
    • به یک کاراکتر با استفاده از ()s3.chars().nth(i).unwrap، جایی که i در محدوده است یا خارج از محدوده.
    • به یک زیررشته با استفاده از [4..0]s3، جایی که این برش در مرزهای کاراکترها است یا نباشد.
  • بسیاری از تایپ داده‌ها می‌توانند با استفاده از متد to_string به رشته تبدیل شوند. این ترید به‌طور خودکار برای تمام تایپ‌هایی که Display را پیاده‌سازی می‌کنند، پیاده‌سازی شده است، بنابراین هر چیزی که می‌تواند قالب‌بندی شود، همچنین می‌تواند به رشته تبدیل شود.