| A variable already borrowed with a certain mutability (either mutable or | |
| immutable) was borrowed again with a different mutability. | |
| Erroneous code example: | |
| ```compile_fail,E0502 | |
| fn bar(x: &mut i32) {} | |
| fn foo(a: &mut i32) { | |
| let y = &a; // a is borrowed as immutable. | |
| bar(a); // error: cannot borrow `*a` as mutable because `a` is also borrowed | |
| // as immutable | |
| println!("{}", y); | |
| } | |
| ``` | |
| To fix this error, ensure that you don't have any other references to the | |
| variable before trying to access it with a different mutability: | |
| ``` | |
| fn bar(x: &mut i32) {} | |
| fn foo(a: &mut i32) { | |
| bar(a); | |
| let y = &a; // ok! | |
| println!("{}", y); | |
| } | |
| ``` | |
| 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 |