| A borrowed variable was used by a closure. |
| |
| Erroneous code example: |
| |
| ```compile_fail,E0500 |
| fn you_know_nothing(jon_snow: &mut i32) { |
| let nights_watch = &jon_snow; |
| let starks = || { |
| *jon_snow = 3; // error: closure requires unique access to `jon_snow` |
| // but it is already borrowed |
| }; |
| println!("{}", nights_watch); |
| } |
| ``` |
| |
| In here, `jon_snow` is already borrowed by the `nights_watch` reference, so it |
| cannot be borrowed by the `starks` closure at the same time. To fix this issue, |
| you can create the closure after the borrow has ended: |
| |
| ``` |
| fn you_know_nothing(jon_snow: &mut i32) { |
| let nights_watch = &jon_snow; |
| println!("{}", nights_watch); |
| let starks = || { |
| *jon_snow = 3; |
| }; |
| } |
| ``` |
| |
| Or, if the type implements the `Clone` trait, you can clone it between |
| closures: |
| |
| ``` |
| fn you_know_nothing(jon_snow: &mut i32) { |
| let mut jon_copy = jon_snow.clone(); |
| let starks = || { |
| *jon_snow = 3; |
| }; |
| println!("{}", jon_copy); |
| } |
| ``` |