1- This error occurs when an attempt is made to assign to a borrowed value.
1+ An attempt was made to assign to a borrowed value.
22
33Erroneous code example:
44
@@ -7,14 +7,12 @@ struct FancyNum {
77 num: u8,
88}
99
10- fn main() {
11- let mut fancy_num = FancyNum { num: 5 };
12- let fancy_ref = &fancy_num;
13- fancy_num = FancyNum { num: 6 };
14- // error: cannot assign to `fancy_num` because it is borrowed
10+ let mut fancy_num = FancyNum { num: 5 };
11+ let fancy_ref = &fancy_num;
12+ fancy_num = FancyNum { num: 6 };
13+ // error: cannot assign to `fancy_num` because it is borrowed
1514
16- println!("Num: {}, Ref: {}", fancy_num.num, fancy_ref.num);
17- }
15+ println!("Num: {}, Ref: {}", fancy_num.num, fancy_ref.num);
1816```
1917
2018Because ` fancy_ref ` still holds a reference to ` fancy_num ` , ` fancy_num ` can't
@@ -27,13 +25,11 @@ struct FancyNum {
2725 num: u8,
2826}
2927
30- fn main() {
31- let mut fancy_num = FancyNum { num: 5 };
32- let moved_num = fancy_num;
33- fancy_num = FancyNum { num: 6 };
28+ let mut fancy_num = FancyNum { num: 5 };
29+ let moved_num = fancy_num;
30+ fancy_num = FancyNum { num: 6 };
3431
35- println!("Num: {}, Moved num: {}", fancy_num.num, moved_num.num);
36- }
32+ println!("Num: {}, Moved num: {}", fancy_num.num, moved_num.num);
3733```
3834
3935If the value has to be borrowed, try limiting the lifetime of the borrow using
@@ -44,18 +40,16 @@ struct FancyNum {
4440 num: u8,
4541}
4642
47- fn main() {
48- let mut fancy_num = FancyNum { num: 5 };
49-
50- {
51- let fancy_ref = &fancy_num;
52- println!("Ref: {}", fancy_ref.num);
53- }
43+ let mut fancy_num = FancyNum { num: 5 };
5444
55- // Works because `fancy_ref` is no longer in scope
56- fancy_num = FancyNum { num: 6 } ;
57- println!("Num : {}", fancy_num .num);
45+ {
46+ let fancy_ref = &fancy_num ;
47+ println!("Ref : {}", fancy_ref .num);
5848}
49+
50+ // Works because `fancy_ref` is no longer in scope
51+ fancy_num = FancyNum { num: 6 };
52+ println!("Num: {}", fancy_num.num);
5953```
6054
6155Or by moving the reference into a function:
@@ -65,17 +59,15 @@ struct FancyNum {
6559 num: u8,
6660}
6761
68- fn main() {
69- let mut fancy_num = FancyNum { num: 5 };
70-
71- print_fancy_ref(&fancy_num);
72-
73- // Works because function borrow has ended
74- fancy_num = FancyNum { num: 6 };
75- println!("Num: {}", fancy_num.num);
76- }
77-
7862fn print_fancy_ref(fancy_ref: &FancyNum){
7963 println!("Ref: {}", fancy_ref.num);
8064}
65+
66+ let mut fancy_num = FancyNum { num: 5 };
67+
68+ print_fancy_ref(&fancy_num);
69+
70+ // Works because function borrow has ended
71+ fancy_num = FancyNum { num: 6 };
72+ println!("Num: {}", fancy_num.num);
8173```
0 commit comments