如果集合实现了 Iterator
,则可以使用 collect
trait 的 FromIterator
方法将迭代器转换为集合。
let vec = (0..10).collect::<Vec<_>>();
let devec = (0..10).collect::<VecDeque<_>>();
Vec
和 VecDeque
实现 FromIterator
特性。Iterator::collect
方法的实现是:fn collect<B: FromIterator<Self::Item>>(self) -> B
where
Self: Sized,
{
FromIterator::from_iter(self)
}
Rust 如何理解从
from_iter
调用 Vec
或 VecDeque
的 FromIterator::from_iter(self)
方法? 最佳答案
当 FromIterator
trait 有一个实现者时,它具有以下形式:
impl<T> FromIterator for Vec<T> {
fn from_iter<I>(iter: I) -> Vec<T> { /* ... */ }
}
它返回具体类型
Self
;即 B
代码中的通用参数 collect
。当您输入
collect::<Vec<_>>()
时,您说 B
是 Vec<_>
,因此,必须调用该 Vec<_>::from_iter()
。collect
的实现可以写成: <B as FromIterator>::from_iter(self)
,但它更冗长。关于rust - Rust 如何理解仅使用 FromIterator::from_iter 调用 from_iter 的适当实现?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54071783/