如何获得向量中找到的项的可变引用?
如果我不使用.iter()使迭代器可变,我尝试了下面的方法
fn main() {
let mut vec = vec![1, 2, 3, 4];
let mut wrong = -1;
let working = match vec.iter().find(|&c| *c == 2) {
Some(c) => c,
None => &wrong
};
println!("Result: {}", working);
}但是当我尝试使用可变迭代器.iter_mut()获取可变引用时,
fn main() {
let mut vec = vec![1, 2, 3, 4];
let mut wrong = -1;
let mut error = match vec.iter_mut().find(|&c| *c == 2) {
Some(c) => c,
None => &mut wrong
};
println!("Result: {}", error);
}我得到以下错误:
errorE0507:无法从借来的内容中移出--> src/main.rs:5:48 \x\x\{\x\提示:为了防止移动,使用
ref c或ref mut c\x不能移出借来的内容
我还尝试使用|&mut c|使闭包中的类型可变,但这会导致以下错误:
errorE0308:不匹配类型--> src/main.rs:5:48让mut error = match vec.iter_mut().find(AC.26&mut c *c == 2) { did ^类型在可变性中有所不同?=注意:预期类型
&&mut {integer}.find类型&mut \_= help:您的意思是mut c: &&&mut {integer}吗?
发布于 2018-01-31 20:54:58
铁锈的.find传递&Self::Item类型的回调,并且由于您使用的是.iter_mut(),所以您已经创建了一个迭代器,其中每个项都是&mut T。这意味着传递给find回调的类型是&&mut T。要把它送到打字机,你可以做任何一个
vec.iter_mut().find(|&&mut c| c == 2)或
vec.iter_mut().find(|c| **c == 2)第二种更好。
您所遇到的错误是因为您通过使用&c选择的中间位置将c设置为&mut T值,而Rust的一个重要规则是,多个事物不能同时拥有对一个项的可变引用。因为允许对一个项具有多个不可变的引用,所以不可变的情况可以工作。
https://stackoverflow.com/questions/48551026
复制相似问题