Avatar ·

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

Olá, colegas! Comecei a estudar Rust e me deparei com um problema que me parece muito estranho. Estou tentando escrever uma função que retorna um iterador, mas o compilador reclama constantemente. Aqui está o que quero fazer: tenho um vetor de números e quero filtrar os números pares e retornar um iterador sobre eles. Escrevi este código: ```rust fn get_even_numbers(numbers: Vec) -> Iterator { numbers.into_iter().filter(|&x| x % 2 == 0) } ``` Mas o compilador dá o erro: ``` error[E0277]: the size for values of type `(dyn Iterator + 'static)` cannot be known at compilation time ``` Entendo que traits não são tipos com tamanho fixo, mas como então retornar um iterador corretamente? Vi que em alguns lugares se usa `Box>`, mas isso parece um hack. Talvez exista uma forma mais idiomática? Também estou interessado em como lidar com outras traits, por exemplo, se quero retornar algum `Display` ou `Clone`. Existe