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!