Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
536 views
in Technique[技术] by (71.8m points)

syntax - Why doesn't the compiler report an error when a variable not declared as mutable is modified?

I installed Rust 1.13 and tried:

fn main() {
    let x: u32;
    x = 10; // no error?
}

When I compiled this file there's some warnings, but there's no error. As I'm not declaring x as mut, shouldn't x = 10; cause an error?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

What you have written is identical to:

let x: u32 = 10;

The compiler will not permit you to mutate it thereafter:

let x: u32;
x = 10;
x = 0; // Error: re-assignment of immutable variable `x`

Note that it is a compiler error if you try to use an uninitialized variable:

let x: u32;
println!("{}", x); // Error: use of possibly uninitialized variable: `x`

This feature can be pretty useful if you want to initialize the variable differently based on runtime conditions. A naive example:

let x: u32;
if condition {
    x = 1;   
} else if other_condition {
    x = 10;
} else {
    x = 100;
}

But still it will still be an error if there is a possibility that it isn't initialized:

let x: u32;
if condition {
    x = 1;   
} else if other_condition {
    x = 10;
} // no else
println!("{:?}", x); // Error: use of possibly uninitialized variable: `x`

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...