mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-21 19:33:16 +00:00
clean up E0506 explanation
This commit is contained in:
parent
1b521f5773
commit
3a10bdcfb6
@ -1,4 +1,4 @@
|
|||||||
This error occurs when an attempt is made to assign to a borrowed value.
|
An attempt was made to assign to a borrowed value.
|
||||||
|
|
||||||
Erroneous code example:
|
Erroneous code example:
|
||||||
|
|
||||||
@ -7,14 +7,12 @@ struct FancyNum {
|
|||||||
num: u8,
|
num: u8,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
let mut fancy_num = FancyNum { num: 5 };
|
||||||
let mut fancy_num = FancyNum { num: 5 };
|
let fancy_ref = &fancy_num;
|
||||||
let fancy_ref = &fancy_num;
|
fancy_num = FancyNum { num: 6 };
|
||||||
fancy_num = FancyNum { num: 6 };
|
// error: cannot assign to `fancy_num` because it is borrowed
|
||||||
// error: cannot assign to `fancy_num` because it is borrowed
|
|
||||||
|
|
||||||
println!("Num: {}, Ref: {}", fancy_num.num, fancy_ref.num);
|
println!("Num: {}, Ref: {}", fancy_num.num, fancy_ref.num);
|
||||||
}
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Because `fancy_ref` still holds a reference to `fancy_num`, `fancy_num` can't
|
Because `fancy_ref` still holds a reference to `fancy_num`, `fancy_num` can't
|
||||||
@ -27,13 +25,11 @@ struct FancyNum {
|
|||||||
num: u8,
|
num: u8,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
let mut fancy_num = FancyNum { num: 5 };
|
||||||
let mut fancy_num = FancyNum { num: 5 };
|
let moved_num = fancy_num;
|
||||||
let moved_num = fancy_num;
|
fancy_num = FancyNum { num: 6 };
|
||||||
fancy_num = FancyNum { num: 6 };
|
|
||||||
|
|
||||||
println!("Num: {}, Moved num: {}", fancy_num.num, moved_num.num);
|
println!("Num: {}, Moved num: {}", fancy_num.num, moved_num.num);
|
||||||
}
|
|
||||||
```
|
```
|
||||||
|
|
||||||
If the value has to be borrowed, try limiting the lifetime of the borrow using
|
If the value has to be borrowed, try limiting the lifetime of the borrow using
|
||||||
@ -44,18 +40,16 @@ struct FancyNum {
|
|||||||
num: u8,
|
num: u8,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
let mut fancy_num = FancyNum { num: 5 };
|
||||||
let mut fancy_num = FancyNum { num: 5 };
|
|
||||||
|
|
||||||
{
|
{
|
||||||
let fancy_ref = &fancy_num;
|
let fancy_ref = &fancy_num;
|
||||||
println!("Ref: {}", fancy_ref.num);
|
println!("Ref: {}", fancy_ref.num);
|
||||||
}
|
|
||||||
|
|
||||||
// Works because `fancy_ref` is no longer in scope
|
|
||||||
fancy_num = FancyNum { num: 6 };
|
|
||||||
println!("Num: {}", fancy_num.num);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Works because `fancy_ref` is no longer in scope
|
||||||
|
fancy_num = FancyNum { num: 6 };
|
||||||
|
println!("Num: {}", fancy_num.num);
|
||||||
```
|
```
|
||||||
|
|
||||||
Or by moving the reference into a function:
|
Or by moving the reference into a function:
|
||||||
@ -65,17 +59,15 @@ struct FancyNum {
|
|||||||
num: u8,
|
num: u8,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
|
||||||
let mut fancy_num = FancyNum { num: 5 };
|
|
||||||
|
|
||||||
print_fancy_ref(&fancy_num);
|
|
||||||
|
|
||||||
// Works because function borrow has ended
|
|
||||||
fancy_num = FancyNum { num: 6 };
|
|
||||||
println!("Num: {}", fancy_num.num);
|
|
||||||
}
|
|
||||||
|
|
||||||
fn print_fancy_ref(fancy_ref: &FancyNum){
|
fn print_fancy_ref(fancy_ref: &FancyNum){
|
||||||
println!("Ref: {}", fancy_ref.num);
|
println!("Ref: {}", fancy_ref.num);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let mut fancy_num = FancyNum { num: 5 };
|
||||||
|
|
||||||
|
print_fancy_ref(&fancy_num);
|
||||||
|
|
||||||
|
// Works because function borrow has ended
|
||||||
|
fancy_num = FancyNum { num: 6 };
|
||||||
|
println!("Num: {}", fancy_num.num);
|
||||||
```
|
```
|
||||||
|
Loading…
Reference in New Issue
Block a user