fn main() {let arr = [1, 2, 3, 4, 5];// 不获取所有权// for item in &arr 与 for item in arr.iter() 等价for item in &arr{println!("{} = {}", item, *item); // item 的类型是&i32}for item in arr.iter() {println!("{} = {}", item, *item); // item 的类型是&i32}let arr2 = ["a".to_string(), "a".to_string(), "a".to_string()];// 获取所有权// for item in arr 和 for item in arr.into_iter等价for item in arr2 {println!("{}", item); // item 的类型是i32}// borrow of moved value: `arr2`// value borrowed here after mov// println!("arr2.len = {}", arr2.len()); // arr2的所有权发生了转移// println!("{:?}", arr2.last()); let arr3 = [1, 2, 3, 4, 5];for item in arr3.into_iter() {println!("{}", item); // item 的类型是i32}println!("arr3.len = {}", arr3.len()); // i32实现了copy类型,所有在迭代时是复制而不是所有权转移println!("{:?}", arr3.last());// 修改数组元素,但不获取所有权// for item in &mut arr3 和 for item in arr3.iter_mut 等价let mut arr3 = [1, 2, 3, 4, 5];for item in &mut arr3 {*item *= 2; // item的类型是&mut i32}println!("{:?}", arr3); // 2, 4, 6, 8, 10for item in arr3.iter_mut() {*item /= 2;}println!("{:?}", arr3); // 1, 2, 3, 4, 5// 获取引用的所有权// for item in (&arr).into_iter 实际是for item in &arr// 明确将引用转换为迭代器// 获取引用的所有权,而不是数组的所有权// 是 for item in &arr的底层展开形式let mut arr4 = [1, 2, 3, 4, 5];for item in (&mut arr4).into_iter() {*item *= 3; // item的类型是&mut i32}println!("{:?}", arr4); let arr5 = [String::from("abc"), String::from("def")];for item in (&arr5).into_iter() {println!("{}", item); // item的类型是&String}println!("{:?}", arr5);
}青海省网站建设_网站建设公司_导航菜单_seo优化