如果集合实现了 Iterator ,则可以使用 collect trait 的 FromIterator 方法将迭代器转换为集合。

let vec = (0..10).collect::<Vec<_>>();
let devec = (0..10).collect::<VecDeque<_>>();
VecVecDeque 实现 FromIterator 特性。
Iterator::collect 方法的实现是:
fn collect<B: FromIterator<Self::Item>>(self) -> B
where
    Self: Sized,
{
    FromIterator::from_iter(self)
}

Rust 如何理解从 from_iter 调用 VecVecDequeFromIterator::from_iter(self) 方法?

最佳答案

FromIterator trait 有一个实现者时,它具有以下形式:

impl<T> FromIterator for Vec<T> {
    fn from_iter<I>(iter: I) -> Vec<T> { /* ... */ }
}

它返回具体类型 Self ;即 B 代码中的通用参数 collect

当您输入 collect::<Vec<_>>() 时,您说 BVec<_>,因此,必须调用该 Vec<_>::from_iter()
collect 的实现可以写成: <B as FromIterator>::from_iter(self) ,但它更冗长。

关于rust - Rust 如何理解仅使用 FromIterator::from_iter 调用 from_iter 的适当实现?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54071783/

10-10 18:34