about summary refs log tree commit diff
diff options
context:
space:
mode:
authorKaiyin Zhong <kindlychung@gmail.com>2016-04-15 18:12:52 +0200
committerKaiyin Zhong <kindlychung@gmail.com>2016-04-15 18:12:52 +0200
commita3f5d8aea1e43a1c5b0814dac407e6ddfab07417 (patch)
tree6f82cf84916504179bf08838de6e24466235c742
parent74b3684d009c0e243a282c9a573ef5e29a2681d9 (diff)
downloadrust-a3f5d8aea1e43a1c5b0814dac407e6ddfab07417.tar.gz
rust-a3f5d8aea1e43a1c5b0814dac407e6ddfab07417.zip
make the borrowing example more concrete
-rw-r--r--src/doc/book/references-and-borrowing.md32
1 files changed, 20 insertions, 12 deletions
diff --git a/src/doc/book/references-and-borrowing.md b/src/doc/book/references-and-borrowing.md
index a08d53f958b..3a1f3f004be 100644
--- a/src/doc/book/references-and-borrowing.md
+++ b/src/doc/book/references-and-borrowing.md
@@ -62,19 +62,27 @@ This is not idiomatic Rust, however, as it doesn’t take advantage of borrowing
 the first step:
 
 ```rust
-fn foo(v1: &Vec<i32>, v2: &Vec<i32>) -> i32 {
-    // do stuff with v1 and v2
-
-    // return the answer
-    42
+fn main() {
+    // Don't worry if you don't understand how `fold` works, the point here is that an immutable reference is borrowed.
+    fn sum_vec(v: &Vec<i32>) -> i32 {
+        return v.iter().fold(0, |a, &b| a + b);
+    }
+    // Borrow two vectors and and sum them.
+    // This kind of borrowing does not allow mutation to the borrowed.
+    fn foo(v1: &Vec<i32>, v2: &Vec<i32>) -> i32 {
+        // do stuff with v1 and v2
+        let s1 = sum_vec(v1);
+        let s2 = sum_vec(v2);
+        // return the answer
+        s1 + s2
+    }
+
+    let v1 = vec![1, 2, 3];
+    let v2 = vec![4, 5, 6];
+
+    let answer = foo(&v1, &v2);
+    println!("{}", answer);
 }
-
-let v1 = vec![1, 2, 3];
-let v2 = vec![1, 2, 3];
-
-let answer = foo(&v1, &v2);
-
-// we can use v1 and v2 here!
 ```
 
 Instead of taking `Vec<i32>`s as our arguments, we take a reference: