revised pointer example
This commit is contained in:
parent
dfc5c0f1e8
commit
8e0e87fc32
1 changed files with 14 additions and 13 deletions
|
|
@ -361,16 +361,16 @@ duration a *lifetime*. Let's try a more complex example:
|
|||
|
||||
```{rust}
|
||||
fn main() {
|
||||
let x = &mut 5;
|
||||
let mut x = 5;
|
||||
|
||||
if *x < 10 {
|
||||
if x < 10 {
|
||||
let y = &x;
|
||||
|
||||
println!("Oh no: {}", y);
|
||||
return;
|
||||
}
|
||||
|
||||
*x -= 1;
|
||||
x -= 1;
|
||||
|
||||
println!("Oh no: {}", x);
|
||||
}
|
||||
|
|
@ -382,17 +382,18 @@ mutated, and therefore, lets us pass. This wouldn't work:
|
|||
|
||||
```{rust,ignore}
|
||||
fn main() {
|
||||
let x = &mut 5;
|
||||
let mut x = 5;
|
||||
|
||||
if *x < 10 {
|
||||
if x < 10 {
|
||||
let y = &x;
|
||||
*x -= 1;
|
||||
|
||||
x -= 1;
|
||||
|
||||
println!("Oh no: {}", y);
|
||||
return;
|
||||
}
|
||||
|
||||
*x -= 1;
|
||||
x -= 1;
|
||||
|
||||
println!("Oh no: {}", x);
|
||||
}
|
||||
|
|
@ -401,12 +402,12 @@ fn main() {
|
|||
It gives this error:
|
||||
|
||||
```text
|
||||
test.rs:5:8: 5:10 error: cannot assign to `*x` because it is borrowed
|
||||
test.rs:5 *x -= 1;
|
||||
^~
|
||||
test.rs:4:16: 4:18 note: borrow of `*x` occurs here
|
||||
test.rs:4 let y = &x;
|
||||
^~
|
||||
test.rs:7:9: 7:15 error: cannot assign to `x` because it is borrowed
|
||||
test.rs:7 x -= 1;
|
||||
^~~~~~
|
||||
test.rs:5:18: 5:19 note: borrow of `x` occurs here
|
||||
test.rs:5 let y = &x;
|
||||
^
|
||||
```
|
||||
|
||||
As you might guess, this kind of analysis is complex for a human, and therefore
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue