diff options
| author | Kaiyin Zhong <kindlychung@gmail.com> | 2016-04-15 18:12:52 +0200 |
|---|---|---|
| committer | Kaiyin Zhong <kindlychung@gmail.com> | 2016-04-15 18:12:52 +0200 |
| commit | a3f5d8aea1e43a1c5b0814dac407e6ddfab07417 (patch) | |
| tree | 6f82cf84916504179bf08838de6e24466235c742 | |
| parent | 74b3684d009c0e243a282c9a573ef5e29a2681d9 (diff) | |
| download | rust-a3f5d8aea1e43a1c5b0814dac407e6ddfab07417.tar.gz rust-a3f5d8aea1e43a1c5b0814dac407e6ddfab07417.zip | |
make the borrowing example more concrete
| -rw-r--r-- | src/doc/book/references-and-borrowing.md | 32 |
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: |
