Avatar ·

如何正确从函数返回迭代器(或任何其他 trait)?

大家好!我开始学习 Rust 并遇到了一个似乎困扰所有新手的问题。我想编写一个返回迭代器的函数。例如,我想创建一个过滤数字并只返回偶数的函数: ```rust fn get_even(numbers: Vec) -> Iterator { numbers.into_iter().filter(|x| x % 2 == 0) } ``` 但编译器报错:“the trait `Iterator` cannot be made into an object”。我读过关于 `dyn` 和 `impl` 的内容,但不完全明白哪种方式是正确的。我尝试使用 `impl Iterator`: ```rust fn get_even(numbers: Vec) -> impl Iterator { numbers.into_iter().filter(|x| x % 2 == 0) } ``` 这能工作,但我不理解:什么时候该用 `impl Trait`,什么时候该用 `Box`?如果我的函数需要根据条件返回不同类型的迭代器该怎么办?例如,有时过滤偶数,有时过滤奇数。请帮我理解,谢谢!