3.1 变量与可变性
- 声明变量使用
let
关键字
- 默认情况下,变量是不可变的(Immutable)
fn main() {
let mut x = 5;
println!("x = {}", x); //5 可变
x = 6;
println!("x = {}", x); //6 可变
let x = 7;
println!("x = {}", x); //7 不可变
}
3.1.1 变量与常量
- 常量 (constant),常量是在绑定值以后也是不可变的,但是他与不可变的变量有很多区别:
- 不可以使用 mut,常量是永远也不可变的
- 生命常量使用 const 关键字,他的类型必须被标注
- 常量可以在任何作用于内进行生命,包括全局作用域
- 常量只可以绑定到常量表达式,无法绑定到函数的调用结果或只能在运行时才能计算出的值
- 在程序运行期间,常量在其声明的作用域内一直有效;
- 命名规范: Rust 里常量使用全大写字母,每个单词之间用下划线分开,例如:
- 例子:
const MAX_POINTS:u32 = 100_000;
const MAX_POINTS:u32 = 100_000;
fn main() {
const MAX_POINTS:u32 = 100_000;
}
3.1.2 Shadowing(覆盖)
- 可以使用相同的名字声明新的变量,新的变量就会 shadow(隐藏)之前声明的同名变量。
fn main() {
let x = 5;
let x = x + 1; //6
let x = x * 2; //12
println!("x is {}", x); //12
}
- shadow 和把变量标记为 mut 是不一样的:
- 如果不使用 let 关键字,那么重新给非 mut 的变量赋值会导致编译时错误;
- 而使用 let 声明的同名新变量,也是不可变的;
- 使用 let 声明的同名新变量,他的类型可以与之前不同;
fn main() {
let spaces = " "; //4个空格 $str
let spaces = spaces.len(); //4 usize
println!("spaces is {}", spaces); //4
}
评论区