我安装了 Rust 1.13 并尝试了:
fn main() {
let x: u32;
x = 10; // no error?
}
当我编译这个文件时有一些警告,但没有错误。因为我没有将 x
声明为 mut
,所以 x = 10;
不应该导致错误吗?
最佳答案
您所写的内容与:
let x: u32 = 10;
此后编译器将不允许您改变它:
let x: u32;
x = 10;
x = 0; // Error: re-assignment of immutable variable `x`
请注意,如果您尝试使用未初始化的变量,则会出现编译器错误:
let x: u32;
println!("{}", x); // Error: use of possibly uninitialized variable: `x`
如果您想根据运行时条件以不同方式初始化变量,则此功能非常有用。一个天真的例子:
let x: u32;
if condition {
x = 1;
} else if other_condition {
x = 10;
} else {
x = 100;
}
但如果有未初始化的可能性,它仍然会报错:
let x: u32;
if condition {
x = 1;
} else if other_condition {
x = 10;
} // no else
println!("{:?}", x); // Error: use of possibly uninitialized variable: `x`
关于variables - 为什么修改未声明为可变的变量时编译器不报错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43519766/