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.
2
2
3
3
Erroneous code example:
4
4
@@ -7,14 +7,12 @@ struct FancyNum {
7
7
num: u8,
8
8
}
9
9
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
15
14
16
- println!("Num: {}, Ref: {}", fancy_num.num, fancy_ref.num);
17
- }
15
+ println!("Num: {}, Ref: {}", fancy_num.num, fancy_ref.num);
18
16
```
19
17
20
18
Because ` fancy_ref ` still holds a reference to ` fancy_num ` , ` fancy_num ` can't
@@ -27,13 +25,11 @@ struct FancyNum {
27
25
num: u8,
28
26
}
29
27
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 };
34
31
35
- println!("Num: {}, Moved num: {}", fancy_num.num, moved_num.num);
36
- }
32
+ println!("Num: {}, Moved num: {}", fancy_num.num, moved_num.num);
37
33
```
38
34
39
35
If the value has to be borrowed, try limiting the lifetime of the borrow using
@@ -44,18 +40,16 @@ struct FancyNum {
44
40
num: u8,
45
41
}
46
42
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 };
54
44
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);
58
48
}
49
+
50
+ // Works because `fancy_ref` is no longer in scope
51
+ fancy_num = FancyNum { num: 6 };
52
+ println!("Num: {}", fancy_num.num);
59
53
```
60
54
61
55
Or by moving the reference into a function:
@@ -65,17 +59,15 @@ struct FancyNum {
65
59
num: u8,
66
60
}
67
61
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
-
78
62
fn print_fancy_ref(fancy_ref: &FancyNum){
79
63
println!("Ref: {}", fancy_ref.num);
80
64
}
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);
81
73
```
0 commit comments