Kurzusok
/
Rust
Rust
/
Tanterv
/
String szeletek
St

String szeletek ebben a kurzusban: Rust

{one: "1 feladat", other: "%{count} feladat"}

A(z) String szeletek fogalomról

A Rust kétféleképpen valósítja meg a karakterek tömbjét: a str és a String típussal.

A str-t, más néven »string slice«-t, általában referenciával együtt, &str alakban használjuk.

Ahhoz, hogy megértsük, miért, hasznos megérteni, miért nem fordul le a következő kódsor

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`

Bár a „Hello, World!” literál hossza fordítási időben ismert lehet, str-ként egy ismeretlen méretű sorozat. De egy literál referenciájaként (&str) van egy „kövér mutatója”, amely a literál memóriabeli címét és hosszát tárolja. A kövér mutatók mérete ismert, így ez a sor le fog fordulni

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

A string slice-hoz tartozó módosítható kötés értéke lecserélhető, de helyben nem módosítható.

Példa

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

Kevésbé korlátozó, ha egy függvény paramétereként &str-t használunk &String helyett, mert ez így nem fordul le

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`

A &str nem alakul át automatikus típuskonverzióval &String-gé. Ez viszont le fog fordulni

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

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

A &String ezzel szemben átalakul &str-ré. Így gyakran hasznosabb a &str paramétertípust használni.

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg