Skip to content

Commit

Permalink
Rollup merge of rust-lang#32991 - kindlychung:patch-2, r=steveklabnik
Browse files Browse the repository at this point in the history
make the borrowing example more concrete
  • Loading branch information
steveklabnik committed Apr 28, 2016
2 parents 0f9ba99 + 10abb66 commit 3c14116
Showing 1 changed file with 26 additions and 0 deletions.
26 changes: 26 additions & 0 deletions src/doc/book/references-and-borrowing.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,32 @@ let answer = foo(&v1, &v2);
// we can use v1 and v2 here!
```

A more concrete example:

```rust
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);
}
```

Instead of taking `Vec<i32>`s as our arguments, we take a reference:
`&Vec<i32>`. And instead of passing `v1` and `v2` directly, we pass `&v1` and
`&v2`. We call the `&T` type a ‘reference’, and rather than owning the resource,
Expand Down

0 comments on commit 3c14116

Please sign in to comment.