1. 默认变量是不可变值的变量:
let x = 5;
println!(x);
x = 8;// not allowed! Would cause error while compiling because x is immutable
let mut y = 10;
println!(y);
y = 11;
println!(y);//that's ok.
注意,虽然无法更改变量的值,这也不意味着t这些变量是常量。理由如下:
- 不允许对常量使用mut关键字。即const mut x = 10不可以。
- const 声明的时候必须指定数据类型。而且不能用let声明。e.g. const x:i8 = 10;
- const可以在任何scope里面声明,包括global scope。
- 常量只能被赋予常量表达式。函数的返回值,或者变量表达式都不可以。
将整个程序中使用的硬编码值命名为常量可以提高程序可读性,并且更易于维护修改。
2. Shadowing
这个描述了一种现像:先声明的某名字的变量的类型被后声明的同名变量的类型覆盖了。比如:
fn main()
{
let x = 5;
let x = x + 1;
let x = x * 2;
}
第二个,第三个赋值都shadow了x。let mut x = 5; x = x + 1;也可以,改变x的值,而shadow的时候就不可以像mut变量这样不带let。通过带着关键字let,我们可以改变变量的值,t并且保持变量的immutable特性。同时,Shadowing也允许我们改变变量类型:
let spaces = " ";
let spaces = spaces.len();
这就是mut变量所不能及的。
参考文献
https://doc.rust-lang.org/book/ch00-00-introduction.html