capypad
0 Tage Serie
rust / intermediate
Snippet

Lebenszeiten in Rust verstehen

Lebenszeiten sind Rusts Methode zur Gewährleistung von Speichersicherheit ohne Garbage Collection. Sie verfolgen, wie lange Referenzen gültig sind. Die 'a Lebenszeit-Annotation verbindet Eingabe- und Ausgabe-Referenzen und garantiert, dass die zurückgegebene Referenz nicht länger lebt als die Eingaben. Structs mit Referenzen müssen ebenfalls Lebenszeiten deklarieren, um sicherzustellen, dass die referenzierten Daten lange genug existieren.

snippet.rs
rust
1
2
3
4
5
6
7
8
9
10
11
12
13
14
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
if x.len() > y.len() { x } else { y }
}
 
struct ImportantExcerpt<'a> {
part: &'a str,
}
 
impl<'a> ImportantExcerpt<'a> {
fn announce_and_return(&self, announcement: &str) -> &str {
println!("Attention: {}", announcement);
self.part
}
}
Erklärung
1
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str
Generische Funktion mit Lebenszeit 'a. Beide Eingabereferenzen müssen mindestens so lange leben wie 'a, Ausgabe lebt mindestens 'a
2
struct ImportantExcerpt<'a>
Struct enthält eine Referenz, daher wird ein Lebenszeitparameter benötigt um Rust zu sagen wie lange diese Referenz gültig ist
3
fn announce_and_return(&self, announcement: &str) -> &str
Methode die eine Referenz zurückgibt; Lebenszeit ist an &self gebunden, sodass die Rückgabe solange gültig ist wie das Struct existiert