Avatar ·

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!