Avatar ·

Comment retourner correctement un itérateur (ou tout autre trait) depuis une fonction en Rust ?

Bonjour à tous ! J'ai commencé à apprendre Rust et j'ai rencontré un problème qui semble tourmenter tous les débutants. Je veux écrire une fonction qui retourne un itérateur. Par exemple, je veux créer une fonction qui filtre les nombres et ne retourne que les pairs : ```rust fn get_even(numbers: Vec) -> Iterator { numbers.into_iter().filter(|x| x % 2 == 0) } ``` Mais le compilateur renvoie une erreur : "the trait `Iterator` cannot be made into an object". J'ai lu à propos de `dyn` et `impl`, mais je ne comprends pas complètement quelle option est correcte. J'ai essayé d'utiliser `impl Iterator` : ```rust fn get_even(numbers: Vec) -> impl Iterator { numbers.into_iter().filter(|x| x % 2 == 0) } ``` Cela fonctionne, mais je n'arrive pas à comprendre : quand faut-il utiliser `impl Trait`, et quand `Box` ? Et que faire si ma fonction doit retourner différents types d'itérateurs en fonction des conditions ? Par exemple, parfois filtrer les pairs, et parfois les impairs. Aidez-moi à y voir clair, s'il vous plaît !