Cómo devolver correctamente un iterador (o cualquier otro trait) desde una función en Rust
¡Hola a todos! Empecé a estudiar Rust y me encontré con un problema que parece atormentar a todos los principiantes. Quiero escribir una función que devuelva un iterador. Por ejemplo, quiero crear una función que filtre números y devuelva solo los pares:
```rust
fn get_even(numbers: Vec) -> Iterator- {
numbers.into_iter().filter(|x| x % 2 == 0)
}
```
Pero el compilador da un error: "the trait `Iterator` cannot be made into an object". He leído sobre `dyn` y `impl`, pero no entiendo completamente cuál opción es la correcta. Probé usando `impl Iterator`:
```rust
fn get_even(numbers: Vec
) -> impl Iterator- {
numbers.into_iter().filter(|x| x % 2 == 0)
}
```
Esto funciona, pero no puedo entender: ¿cuándo se debe usar `impl Trait` y cuándo `Box
`? ¿Y qué hacer si mi función debe devolver diferentes tipos de iteradores dependiendo de las condiciones? Por ejemplo, a veces filtrar pares y a veces impares. ¡Ayúdenme a entenderlo, por favor!