如何正确从函数返回迭代器(或任何其他 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
`?如果我的函数需要根据条件返回不同类型的迭代器该怎么办?例如,有时过滤偶数,有时过滤奇数。请帮我理解,谢谢!