为什么`Iterator.find()`需要可变的`self`引用?

9

来自官方文档

fn find<P>(&mut self, predicate: P) -> Option<Self::Item> 
where P: FnMut(&Self::Item) -> bool

我不明白为什么需要一个可变引用来引用self。有人可以解释一下吗?
1个回答

8

它需要能够突变 self,因为它正在推进迭代器。每次调用 next 时,迭代器都会发生变化:

fn next(&mut self) -> Option<Self::Item>;

这里是 find 方法的实现代码

fn find<P>(&mut self, mut predicate: P) -> Option<Self::Item> where
    Self: Sized,
    P: FnMut(&Self::Item) -> bool,
{
    for x in self.by_ref() {
        if predicate(&x) { return Some(x) }
    }
    None
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接