Lifetime-Annotationen
Lifetimes benennen
Lifetime-Annotationen ist eine kostenlose Learn Rust Coding-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Learn Rust Coding-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Learn Rust Coding-Kurs umfasst insgesamt 4 Lektionen.
Eine Lebenszeit benennen
Eine Lebenszeitannotation ist ein Name, der mit einem Apostroph beginnt, etwa 'a. Sie verändert nicht, wie lange etwas lebt, sondern beschreibt Beziehungen zwischen den Lebenszeiten von Referenzen.
Wo Annotationen stehen
Sie deklarieren Lebenszeitparameter in spitzen Klammern nach dem Funktionsnamen und verwenden sie anschließend bei den Referenztypen – genauso wie generische Typparameter.
Syntax: fn name<'a>(x: &'a T) -> &'a T.
Die klassische longest-Funktion
Eine Funktion, die eine von zwei Referenzen zurückgibt, benötigt eine Annotation. 'a besagt, dass das Ergebnis so lange lebt wie die kürzere der beiden Eingaben.
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
if x.len() > y.len() { x } else { y }
}
fn main() {
let a = String::from("long string");
let b = String::from("short");
println!("{}", longest(&a, &b));
}Was 'a hier bedeutet
Die Annotation teilt dem Compiler mit: Die zurückgegebene Referenz ist nur gültig, solange beide Eingaben gültig sind. Der Compiler prüft anschließend jede Aufrufstelle anhand dieses Vertrags.
Warum das erforderlich ist
Ohne die Annotation kann der Compiler nicht wissen, ob die Rückgabe von x oder y borgt. Der Lebenszeitname verknüpft sie, damit der Borrow Checker das Ergebnis analysieren kann.
Unterschiedliche Lebenszeiten
Wenn Referenzen unabhängig voneinander sind, geben Sie ihnen unterschiedliche Lebenszeitnamen. Hier wird nur x zurückgegeben, daher ist für das Ergebnis nur dessen Lebenszeit relevant.
fn first<'a, 'b>(x: &'a str, _y: &'b str) -> &'a str {
x
}
fn main() {
let a = String::from("keep me");
let b = String::from("ignore");
println!("{}", first(&a, &b));
}Lebenszeiten verlängern das Leben nicht
Annotationen lassen Daten niemals länger leben. Sie geben lediglich Einschränkungen an, die der Compiler überprüfen muss. Wenn ein Wert zu früh nicht mehr existiert, wird der Code unabhängig von den Annotationen nicht kompiliert.
Ein gültiger Aufruf
Solange beide Eingaben länger als bis zur Verwendung des Ergebnisses leben, wird der Aufruf akzeptiert. Hier leben beide Zeichenketten bis zur Ausgabe, daher ist alles in Ordnung.
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
if x.len() > y.len() { x } else { y }
}
fn main() {
let a = String::from("abcdef");
let result;
{
let b = String::from("xy");
result = longest(&a, &b);
println!("chosen: {}", result);
}
}Lebenszeiten mit Generics
Lebenszeit- und Typparameter können gemeinsam auftreten. Lebenszeiten werden zuerst in den spitzen Klammern aufgeführt.
use std::fmt::Display;
fn announce<'a, T: Display>(text: &'a str, value: T) -> &'a str {
println!("value is {}", value);
text
}
fn main() {
let msg = String::from("hello");
println!("{}", announce(&msg, 42));
}Die 'static-Lebenszeit
'static ist eine besondere Lebenszeit und bedeutet, dass die Referenz während des gesamten Programms leben kann. String-Literale besitzen diese Lebenszeit, weil sie fest in das Binärprogramm eingebettet sind.
fn motto() -> &'static str {
"fearless concurrency"
}
fn main() {
println!("{}", motto());
}Lebenszeitannotationen lesen
Lesen Sie &'a str als eine für die Lebensdauer 'a gültige String-Referenz. Wenn zwei Parameter 'a gemeinsam verwenden, verknüpft der Compiler ihre Lebensdauern bei jedem Aufruf mit der jeweils kürzeren.
Kurzer Check
Testen Sie Ihr Verständnis von Lebensdauerannotationen.
Zusammenfassung
Sie haben gelernt, Lebensdauern zu benennen:
- Lebensdauern verwenden Namen wie
'a, die in spitzen Klammern deklariert werden - Gemeinsame Namen drücken aus, dass Referenzen zusammenhängen (z. B. dass das Ergebnis an die Eingaben gebunden ist)
- Annotationen beschreiben Lebensdauern, verlängern sie aber nicht
'staticbedeutet, dass etwas während der gesamten Programmlaufzeit gültig ist
Häufig gestellte Fragen
Ist die Lektion „Lifetime-Annotationen“ kostenlos?
Ja — der vollständige Text von „Lifetime-Annotationen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Learn Rust Coding-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Learn Rust Coding-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Lifetime-Annotationen“?
Lifetimes benennen Du übst Learn Rust Coding mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Learn Rust Coding zu starten?
Keine Vorkenntnisse erforderlich. Learn Rust Coding auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Lifetime-Annotationen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Learn Rust Coding-Lektion Code schreiben und ausführen?
Ja. Jede Learn Rust Coding-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Warum Lifetimes?
- Lifetime-Annotationen
- Lifetimes in Structs
- Elisionsregeln