المسارات
/
Rust
Rust
/
المنهج
/
شرائح السلسلة النصية
شر

شرائح السلسلة النصية في Rust

{zero: "لا توجد تمارين", one: "1 تمرين", two: "تمرينان", few: "%{count} تمارين", many: "%{count} تمرينًا", other: "%{count} تمرين"}

نبذة عن شرائح السلسلة النصية

هناك طريقتان لتمثيل مصفوفة من الحروف في Rust: str وString.

str، المعروف أيضًا باسم «شريحة السلسلة النصية»، يُستخدم عادةً مع مرجع على الشكل &str.

لمعرفة السبب، قد يساعدك أن تفهم لماذا لن يُصرَّف سطر الكود التالي

const MY_CONST: str = *"Hello, World!";

// the size for values of type `str` cannot be known at compilation time
// the trait `Sized` is not implemented for `str`

حتى وإن كان طول النص الحرفي "Hello, World!" معروفًا في وقت التصريف، فإنه بصفته str يكون تسلسلًا مجهول الحجم. لكنه بصفته مرجعًا إلى نص حرفي (&str)، فإنه يمتلك "مؤشرًا سمينًا" يحمل عنوان النص الحرفي وطوله في الذاكرة. المؤشرات السمينة ذات حجم معروف، ولذلك سيُصرَّف هذا السطر

const MY_CONST: &str = "Hello, World!";

يمكن استبدال قيمة ارتباط قابل للتغيير بشريحة السلسلة النصية، لكن لا يمكن تعديله في مكانه.

مثال

let mut my_str = "Hello, World!";
my_str = "Hi!";
let mut my_string = String::from("Hello");
my_string.push_str(", World!"); // there is no equivalent function to modify &str

استخدام &str بدلًا من &String عند تعريف معامل لدالة يفرض قيودًا أقل، لأن هذا لن يُصرَّف

pub fn main() {
    let my_str: &str = "Hello, World!";
    say_hi(my_str);
}

fn say_hi(phrase: &String) {
    println!("{phrase:?}");
}

// mismatched types
// expected reference `&String`
// found reference `&str`

لن يُحوَّل &str ضمنيًا إلى &String. لكن هذا سيُصرَّف

pub fn main() {
    let my_string = String::from("Hello, World!");
    say_hi(&my_string)
}

fn say_hi(phrase: &str) {
    println!("{phrase:?}");
}

سيُحوَّل &String ضمنيًا إلى &str. لذا فإن استخدام نوع معامل من &str سيكون أكثر فائدة في كثير من الأحيان.

تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة