| 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); | |
| } | |
| ``` |