Was sind Some und None in Rust? Erklären Sie Option<T> für Anfänger
Hallo! Ich habe gerade angefangen, Rust nach Python und JavaScript zu lernen, und bin auf eine unverständliche Konstruktion gestoßen. In fremdem Code sehe ich oft solche Dinge:
```rust
fn find_user(id: u32) -> Option {
if id == 42 {
Some(String::from("Alice"))
} else {
None
}
}
```
Ich verstehe überhaupt nicht, was `Some` und `None` sind. Warum kann man nicht einfach einen String oder `null` zurückgeben? In Python würde ich schreiben:
```python
def find_user(id):
if id == 42:
return "Alice"
else:
return None
```
Und das würde funktionieren. Aber in Rust muss ich irgendein `Option` schreiben und das Ergebnis in `Some` einwickeln. Außerdem habe ich versucht, das Ergebnis dieser Funktion zu verwenden – und bekam einen Kompilierungsfehler. Hier ist mein Code:
```rust
let user = find_user(42);
println!("User: {}", user); // Fehler!
```
Der Compiler beschwert sich, dass `Option` das `Display`-Trait nicht implementiert. Wie arbeite ich richtig damit? Was bedeuten `Some` und `None` überhaupt? Warum kann Rust es nicht machen wie