Shared and Unique Borrows
Rust puts constraints on the ways you can borrow values:
- You can have one or more
&Tvalues at any given time, or - You can have exactly one
&mut Tvalue.
1. fn main() {
2. let mut a: i32 = 10;
3. let b: &i32 = &a;
5. {
6. let c: &mut i32 = &mut a;
7. *c = 20;
8. }
10. println!("a: {a}");
11. println!("b: {b}");
12. }
- The above code does not compile because
ais borrowed as mutable (throughc) and as immutable (throughb) at the same time. - Move the
println!statement forbbefore the scope that introducescto make the code compile. - After that change, the compiler realizes that
bis only ever used before the new mutable borrow ofathroughc. This is a feature of the borrow checker called “non-lexical lifetimes”.
