capypad
0 Tage Serie
rust / intermediate
Snippet

Lebenszeiten in Strukturedefinitionen: Referenzgültigkeit sicherstellen

Lebenszeiten sind Rusts Weg, Speichersicherheit ohne Garbage Collection zu gewährleisten. Wenn eine Struktur eine Referenz enthält, müssen Sie annotieren, wie lange diese Referenz gültig ist. Der Lebenszeitparameter 'a in ImportantExcerpt<'a> teilt dem Compiler mit: 'die in part gespeicherte Referenz ist mindestens so lange gültig wie die Strukturexistenz.' Dies verhindert hängende Referenzen bereits zur Kompilierzeit.

snippet.rs
rust
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
struct ImportantExcerpt<'a> {
part: &'a str,
}
 
impl<'a> ImportantExcerpt<'a> {
fn new(text: &'a str) -> Self {
ImportantExcerpt { part: text }
}
fn announce_and_return(&self, announcement: &str) -> &str {
println!("Announcement: {}", announcement);
self.part
}
}
 
fn main() {
let text = String::from("The only thing we have to fear is fear itself.");
let excerpt = ImportantExcerpt::new(&text);
println!("Excerpt: {}", excerpt.part);
}
Erklärung
1
struct ImportantExcerpt<'a> {
Deklariert eine Struktur mit einem Lebenszeitparameter 'a
2
part: &'a str,
Das Feld part ist eine Referenz, die mindestens so lange wie 'a leben muss
3
impl<'a> ImportantExcerpt<'a> {
Der Implementierungsblock trägt ebenfalls den Lebenszeitparameter, um ihn mit der Struktur zu verbinden
4
fn announce_and_return(&self, announcement: &str) -> &str {
Der Rückgabetyp muss dieselbe Lebenszeit 'a verwenden, um Sicherheit zu garantieren
5
self.part
Gibt eine Referenz zurück, die garantiert für die Lebenszeit 'a gültig ist