| 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 |