| A value was used after it was mutably borrowed. | |
| Erroneous code example: | |
| ```compile_fail,E0503 | |
| fn main() { | |
| let mut value = 3; | |
| // Create a mutable borrow of `value`. | |
| let borrow = &mut value; | |
| let _sum = value + 1; // error: cannot use `value` because | |
| // it was mutably borrowed | |
| println!("{}", borrow); | |
| } | |
| ``` | |
| In this example, `value` is mutably borrowed by `borrow` and cannot be | |
| used to calculate `sum`. This is not possible because this would violate | |
| Rust's mutability rules. | |
| You can fix this error by finishing using the borrow before the next use of | |
| the value: | |
| ``` | |
| fn main() { | |
| let mut value = 3; | |
| let borrow = &mut value; | |
| println!("{}", borrow); | |
| // The block has ended and with it the borrow. | |
| // You can now use `value` again. | |
| let _sum = value + 1; | |
| } | |
| ``` | |
| Or by cloning `value` before borrowing it: | |
| ``` | |
| fn main() { | |
| let mut value = 3; | |
| // We clone `value`, creating a copy. | |
| let value_cloned = value.clone(); | |
| // The mutable borrow is a reference to `value` and | |
| // not to `value_cloned`... | |
| let borrow = &mut value; | |
| // ... which means we can still use `value_cloned`, | |
| let _sum = value_cloned + 1; | |
| // even though the borrow only ends here. | |
| println!("{}", borrow); | |
| } | |
| ``` | |
| For more information on Rust's ownership system, take a look at the | |
| [References & Borrowing][references-and-borrowing] section of the Book. | |
| [references-and-borrowing]: https://doc.rust-lang.org/book/ch04-02-references-and-borrowing.html |