Rust 为什么范围必须是mut才能调用“find”?

Rust 为什么范围必须是mut才能调用“find”?,rust,Rust,我想找到第一个不是0的偶数。我对它的变异不感兴趣,所以我认为上面的代码会给我一个不可变的选项: fn main() { let first_ten = 0..10; let val = first_ten.find(|&n| (n % 2 == 0) && n > 0); println!("{}", val.unwrap()); } 相反,我得到了以下错误: -->src/main.rs:3:13 | 2 |设第一个十=0..10; --

我想找到第一个不是0的偶数。我对它的变异不感兴趣,所以我认为上面的代码会给我一个不可变的选项:

fn main() {
    let first_ten = 0..10;
    let val = first_ten.find(|&n| (n % 2 == 0) && n > 0);
    println!("{}", val.unwrap());
}
相反,我得到了以下错误:

-->src/main.rs:3:13
|
2 |设第一个十=0..10;
------------------------------------------------------------------------------------------------------------
3 |让val=first|ten.find(|&n |)(n%2==0)和&n>0);
|^^^^^^^^^^^^^不能相互借用
我发现,我看到谓词被定义为:

P: FnMut(&Self::Item) -> bool, 

如果我将
first\u ten
的定义更改为
让mut first\u ten=0..10
,那么代码可以工作。为什么
first\u ten
需要有
mut

find
Iterator::find
,定义为:

fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
迭代器
获取下一个内容的唯一方法是对其进行变异<代码>查找没有任何选择


范围必须是可变的,因为您将其用作迭代器,迭代器必须是可变的才能进行迭代,搜索迭代器需要对其进行迭代。

find
iterator::find
,定义为:

fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
迭代器
获取下一个内容的唯一方法是对其进行变异<代码>查找没有任何选择

范围必须是可变的,因为您将其用作迭代器,迭代器必须是可变的才能进行迭代,搜索迭代器需要对其进行迭代