Hoe maak je een Rust-struct met stringleden?

Ik wil dat de leden eigendom zijn van de structuur. Sorry voor de simpele vraag, maar ik kon geen voorbeeld vinden. Ik ben op zoek naar de juiste declaratie van een struct en voorbeelden van instantiatie.


Antwoord 1, autoriteit 100%

Als de string eigendom moet zijn van de struct, dan moet je Stringgebruiken. Als alternatief kunt u een &strgebruiken met een statische levensduur (d.w.z. de levensduur van het programma). Bijvoorbeeld:

struct Foo {
    bar: String,
    baz: &'static str,
}
fn main() {
    let foo = Foo {
        bar: "bar".to_string(),
        baz: "baz",
    };
    println!("{}, {}", foo.bar, foo.baz);
}

Als de levensduur van de string onbekend is, kunt u Fooparametreren met een levensduur:

struct Foo<'a> {
    baz: &'a str,
}

Zie ook:

Als u niet zeker weet of de tekenreeks eigendom is of niet (handig om toewijzingen te vermijden), kunt u borrow::Cow:

use std::borrow::Cow;
struct Foo<'a> {
    baz: Cow<'a, str>,
}
fn main() {
    let foo1 = Foo {
        baz: Cow::Borrowed("baz"),
    };
    let foo2 = Foo {
        baz: Cow::Owned("baz".to_string()),
    };
    println!("{}, {}", foo1.baz, foo2.baz);
}

Houd er rekening mee dat het type Coween leven lang wordt geparametreerd. De levensduur verwijst naar de levensduur van de geleendetekenreeks (d.w.z. wanneer het een Borrowedis). Als je een Cowhebt, kun je borrowgebruiken en een &'a strkrijgen, waarmee je normale tekenreeksbewerkingen kunt uitvoeren zonder zorgen maken over het al dan niet toewijzen van een nieuwe string. Doorgaans is het expliciet aanroepen van borrowniet vereist vanwege deref-dwang. De waarden van Cowverwijzen namelijk automatisch naar hun geleende vorm, dus &*valwaarbij valhet type Cow<'a, str>zal een &strproduceren.

Other episodes