fn main() {
let values = vec![1, 2, 3];
for v in values.into_iter() {
println!("{}", v)
}
// 下面的代码将报错,因为 values 的所有权在上面 `for` 循环中已经被转移走
// println!("{:?}",values);
let values = vec![1, 2, 3];
let _values_iter = values.iter();
// 不会报错,因为 values_iter 只是借用了 values 中的元素
println!("{:?}", values);
let mut values = vec![1, 2, 3];
// 对 values 中的元素进行可变借用
let mut values_iter_mut = values.iter_mut();
// 取出第一个元素,并修改为0
if let Some(v) = values_iter_mut.next() {
*v = 0;
}
// 输出[0, 2, 3]
println!("{:?}", values);
}
具体解释在代码注释中,就不再赘述,不过有两点需要注意的是:
.iter()方法实现的迭代器,调用next方法返回的类型是Some(&T).iter_mut()方法实现的迭代器,调用next方法返回的类型是Some(&mut T),因此在if let Some(v) = values_iter_mut.next()中,v的类型是&mut i32,最终我们可以通过*v = 0的方式修改其值
原创文章,作者:sunnyman218,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/273694.html