Ich möchte, dass die Mitglieder der Struktur gehören. Entschuldigung für die einfache Frage, aber ich konnte kein Beispiel finden. Ich suche nach der richtigen Deklaration einer Struktur und Instanziierungsbeispielen.
Antworten:
Wenn die Zeichenfolge der Struktur gehören muss, sollten Sie verwenden String. Alternativ können Sie eine &strmit einer statischen Lebensdauer (dh der Lebensdauer des Programms) verwenden. Zum Beispiel:
struct Foo {
bar: String,
baz: &'static str,
}
fn main() {
let foo = Foo {
bar: "bar".to_string(),
baz: "baz",
};
println!("{}, {}", foo.bar, foo.baz);
}
Wenn die Lebensdauer der Zeichenfolge unbekannt ist, können Sie Foomit einer Lebensdauer parametrisieren :
struct Foo<'a> {
baz: &'a str,
}
Siehe auch:
Wenn Sie nicht sicher sind, ob die Zeichenfolge im Besitz ist oder nicht (nützlich, um Zuweisungen zu vermeiden), können Sie Folgendes verwenden 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);
}
Beachten Sie, dass der CowTyp über eine Lebensdauer parametrisiert wird. Die Lebensdauer bezieht sich auf die Lebensdauer der geliehenen Zeichenfolge (dh wenn es sich um eine handelt Borrowed). Wenn Sie eine haben Cow, können Sie eine verwenden borrowund erhalten &'a str, mit der Sie normale Zeichenfolgenoperationen ausführen können, ohne sich Gedanken darüber machen zu müssen, ob eine neue Zeichenfolge zugewiesen werden soll oder nicht. In der Regel ist ein explizites Aufrufen von borrowaufgrund von Deref-Zwängen nicht erforderlich. CowWerte werden nämlich automatisch von ihrer geliehenen Form dereferenziert, sodass &*valbei einem valTyp Cow<'a, str>ein a erzeugt wird &str.
Stringveränderlich ist. Wenn ich eine Struktur mit beispielsweise einem nameFeld habe, das unveränderlich sein sollte, sollte ich sie trotzdem Stringanstelle von verwenden str?
Stringund beachten Sie, dass das Erstellen einesStringFrom-&strVia.to_string()eine Heap-Zuweisung und das Kopieren der gesamten Zeichenfolge umfasst.