Avatar ·

Como retornar corretamente um iterador (ou qualquer outra trait) de uma função em Rust?

Olá a todos! Comecei a estudar Rust e me deparei com um problema que parece atormentar todos os iniciantes. Quero escrever uma função que retorna um iterador. Por exemplo, quero criar uma função que filtra números e retorna apenas os pares: ```rust fn get_even(numbers: Vec) -> Iterator { numbers.into_iter().filter(|x| x % 2 == 0) } ``` Mas o compilador dá um erro: "the trait `Iterator` cannot be made into an object". Li sobre `dyn` e `impl`, mas não entendo completamente qual opção é a correta. Tentei usar `impl Iterator`: ```rust fn get_even(numbers: Vec) -> impl Iterator { numbers.into_iter().filter(|x| x % 2 == 0) } ``` Isso funciona, mas não consigo entender: quando devo usar `impl Trait` e quando devo usar `Box`? E o que fazer se minha função precisar retornar diferentes tipos de iteradores dependendo das condições? Por exemplo, às vezes filtrar pares, às vezes ímpares. Ajude-me a entender, por favor!