X-Git-Url: https://git.ralfj.de/rust-101.git/blobdiff_plain/29958c0fd33c5e714b52bed79a1832113c43b8d8..e7d7a4a73b044faa7f3959b9c48e1919bef0d54e:/workspace/src/part04.rs diff --git a/workspace/src/part04.rs b/workspace/src/part04.rs index 4f2174a..bde913f 100644 --- a/workspace/src/part04.rs +++ b/workspace/src/part04.rs @@ -14,7 +14,7 @@ fn work_on_vector(v: Vec) { /* do something */ } fn ownership_demo() { let v = vec![1,2,3,4]; work_on_vector(v); - /* println!("The first element is: {}", v[0]); */ + /* println!("The first element is: {}", v[0]); */ /* BAD! */ } // ## Shared borrowing @@ -23,7 +23,9 @@ fn vec_min(v: &Vec) -> Option { use std::cmp; let mut min = None; - for e in v { + // This time, we explicitly request an iterator for the vector `v`. The method `iter` borrows the vector + // it works on, and provides shared borrows of the elements. + for e in v.iter() { // In the loop, `e` now has type `&i32`, so we have to dereference it to obtain an `i32`. min = Some(match min { None => *e, @@ -45,7 +47,7 @@ fn shared_borrow_demo() { // ## Mutable borrowing fn vec_inc(v: &mut Vec) { - for e in v { + for e in v.iter_mut() { *e += 1; } } @@ -55,7 +57,7 @@ fn mutable_borrow_demo() { /* let first = &v[0]; */ vec_inc(&mut v); vec_inc(&mut v); - /* println!("The first element is: {}", *first); */ + /* println!("The first element is: {}", *first); */ /* BAD! */ } // ## Summary