0Pricing
Learn Rust Coding · Lektion

Elisionsregeln

Wann Lifetimes abgeleitet werden

Elisionsregeln ist eine kostenlose Learn Rust Coding-Lektion auf CoddyKit. Dies ist Lektion 4 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.

Lebensdauern, die Sie nicht schreiben

Viele Funktionen nehmen Referenzen entgegen und geben sie zurück, ohne Lebensdauerannotationen zu enthalten, und lassen sich trotzdem kompilieren. Der Grund dafür ist die Lebensdauerelision: Der Compiler leitet eindeutige Lebensdauern für Sie her.

Elision ist nur eine Abkürzung

Elision entfernt keine Lebensdauern; der Compiler ergänzt sie im Hintergrund weiterhin anhand einiger deterministischer Regeln. Wenn diese Regeln Ihren Fall abdecken, können Sie die Annotationen weglassen.

Eine Funktion mit ausgelassenen Lebensdauern

Diese Funktion enthält keine expliziten Lebensdauern, dennoch versteht der Compiler, dass die zurückgegebene Referenz Daten aus der Eingabe ausleiht. Durch die Regeln ist die Zuordnung eindeutig.

fn first_word(s: &str) -> &str {
    s.split(' ').next().unwrap_or("")
}

fn main() {
    let phrase = String::from("rust is fun");
    println!("{}", first_word(&phrase));
}

Regel 1: Jede Eingabe erhält eine eigene Lebensdauer

Die erste Regel: Jede ausgelassene Lebensdauer in den Parametern erhält eine eigene Lebensdauer. Zwei Referenzparameter erhalten zwei getrennte Lebensdauern.

Regel 2: Eine Eingabe, eine Ausgabe

Die zweite Regel: Gibt es genau eine Eingabe-Lebensdauer, wird sie allen Ausgabe-Lebensdauern zugewiesen. Das gilt für Funktionen wie first_word, die eine Referenz entgegennehmen und eine Referenz zurückgeben.

fn trim_start(s: &str) -> &str {
    s.trim_start()
}

fn main() {
    println!("[{}]", trim_start("   hi"));
}

Regel 3: Methoden und &self

Die dritte Regel: Wenn eine Methode &self oder &mut self enthält, wird die Lebensdauer von self allen Ausgabe-Lebensdauern zugewiesen. Deshalb benötigen Methoden nur selten Annotationen.

struct Holder { value: String }

impl Holder {
    fn get(&self) -> &str {
        &self.value
    }
}

fn main() {
    let h = Holder { value: String::from("stored") };
    println!("{}", h.get());
}

Wenn Elision nicht ausreicht

Wenn nach Anwendung aller drei Regeln eine Ausgabe-Lebensdauer weiterhin unbekannt ist, fordert der Compiler Sie auf, sie explizit zu annotieren. Die Funktion longest ist der klassische Fall: zwei Eingaben und eine nicht eindeutig zuordenbare Ausgabe.

Die Funktion longest erneut

Zwei Referenzeingaben und eine Referenzausgabe: Regel 2 gilt nicht, weil es mehr als eine Eingabe gibt, und self ist nicht vorhanden. Daher müssen Sie die Lebensdauer annotieren.

fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
    if x.len() > y.len() { x } else { y }
}

fn main() {
    println!("{}", longest("abcd", "ab"));
}

Mehrere Eingaben, Ausgabe aus self

Eine Methode mit mehreren Parametern erhält ihre Ausgabe-Lebensdauer gemäß Regel 3 trotzdem von self, auch wenn weitere Referenzparameter vorhanden sind.

struct Doc { body: String }

impl Doc {
    fn announce(&self, _note: &str) -> &str {
        &self.body
    }
}

fn main() {
    let d = Doc { body: String::from("content") };
    println!("{}", d.announce("ping"));
}

Warum es diese Regeln gibt

Diese drei Regeln decken den überwältigenden Großteil des echten Codes ab, sodass die meisten Funktionen überhaupt keine Syntax für Lebensdauern benötigen. Sie schreiben Annotationen nur dann, wenn die Absicht tatsächlich nicht eindeutig ist.

Eine kurze Checkliste

Um festzustellen, ob Elision angewendet wird, fragen Sie sich:

  • Gibt es genau eine Eingabe-Referenz? Die Ausgabe leiht Daten aus ihr aus.
  • Gibt es ein &self? Die Ausgabe leiht Daten aus self aus.
  • Andernfalls annotieren Sie die Lebensdauer explizit.

Kurzer Check

Testen Sie Ihr Verständnis der Elisionsregeln.

Zusammenfassung

Sie haben gelernt, wann Lebensdauern hergeleitet werden:

  • Regel 1: Jede Eingabe-Referenz erhält ihre eigene Lebensdauer
  • Regel 2: Eine Eingabe-Lebensdauer wird allen Ausgaben zugewiesen
  • Regel 3: &self liefert in Methoden die Ausgabe-Lebensdauer
  • Bleiben Ausgaben nicht eindeutig, annotieren Sie sie explizit

Häufig gestellte Fragen

Ist die Lektion „Elisionsregeln“ kostenlos?

Ja — der vollständige Text von „Elisionsregeln“ 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 „Elisionsregeln“?

Wann Lifetimes abgeleitet werden 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 4 von 4.

Wie lange dauert die Lektion „Elisionsregeln“?

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

  1. Warum Lifetimes?
  2. Lifetime-Annotationen
  3. Lifetimes in Structs
  4. Elisionsregeln
← Zurück zu Learn Rust Coding