Wie man einen Iterator (oder ein anderes Trait) korrekt aus einer Funktion in Rust zurückgibt
Hallo zusammen! Ich habe angefangen, Rust zu lernen, und bin auf ein Problem gestoßen, das scheinbar alle Anfänger quält. Ich möchte eine Funktion schreiben, die einen Iterator zurückgibt. Zum Beispiel möchte ich eine Funktion erstellen, die Zahlen filtert und nur gerade zurückgibt:
```rust
fn get_even(numbers: Vec) -> Iterator- {
numbers.into_iter().filter(|x| x % 2 == 0)
}
```
Aber der Compiler gibt einen Fehler aus: "the trait `Iterator` cannot be made into an object". Ich habe über `dyn` und `impl` gelesen, verstehe aber nicht ganz, welche Variante richtig ist. Ich habe `impl Iterator` ausprobiert:
```rust
fn get_even(numbers: Vec
) -> impl Iterator- {
numbers.into_iter().filter(|x| x % 2 == 0)
}
```
Das funktioniert, aber ich verstehe nicht: Wann sollte man `impl Trait` und wann `Box
` verwenden? Und was mache ich, wenn meine Funktion je nach Bedingungen verschiedene Iteratortypen zurückgeben soll? Zum Beispiel manchmal gerade filtern, manchmal ungerade. Bitte helft mir, das zu verstehen!