Warum muss man in Rust explizit Lebenszeiten (lifetimes) angeben und wie funktionieren sie?
Ich bin neu in Rust und versuche, das Konzept der Lebenszeiten (lifetimes) zu verstehen. Ich habe eine einfache Funktion geschrieben, die einen Verweis auf ein Array-Element zurückgibt:
```rust
fn get_first_element(arr: &[i32]) -> &i32 {
&arr[0]
}
```
Der Compiler hat dies ohne Probleme kompiliert. Aber als ich versuchte, eine Funktion zu schreiben, die zwei Verweise akzeptiert und einen davon zurückgibt:
```rust
fn longest(x: &str, y: &str) -> &str {
if x.len() > y.len() { x } else { y }
}
```
Erhielt ich einen Fehler: "missing lifetime specifier". Warum hat der Compiler im ersten Fall selbstständig erkannt, was zu tun ist, während er im zweiten Fall eine explizite Angabe der Lebenszeit verlangt? Ich dachte, Rust sei intelligent und könne alles automatisch ableiten.
Ich verstehe, dass Lebenszeiten benötigt werden, um hängende Verweise zu verhindern, aber ich verstehe die Logik nicht, warum sie in manchen Fällen automatisch abgeleitet werden und in anderen nicht.
Noch keine Antworten.
Anmelden um eine Antwort zu hinterlassen