变量可变性

  • 声明变量使用 let 关键字
  • 默认情况 变量不可变 (immediate)
let x:i32 = 5;
println!("{}",x);

// x=6 编辑器报错
  • 可变变量需要在声明时使用 (mut) 关键字
let mut x:i32 = 5;

x=6; // 不报错

变量与常量

  • 常量 (constant) 常量在绑定值之后也是不可变的

    1. 不可以使用 (mut) 常量永远不可变
    2. 常量使用 (const) 关键字 他的类型必须被标注
    3. 常量可以在任何作用域被声明 包括全局作用域
    4. 常量可以绑定到常量表达式 无法绑定到函数调用的结果或只能在运行时才能计算出的值
  • 在运行期间 常量在其声明的作用域内一直有效

  • 命名规范 全字母大写 每个单词用 _ 进行分割

// 常量的声明
const MAX_POINTS: u32 = 100_000

隐藏 Shadowing

  • 可以使用相同的名字声明新的变量 新的变量就会 shadow 之前的变量
    1. 在后续的代码中 这个变量名代表的就是新的变量
let x = 1;
let x = x + 1;

println!("{}",x); // x=6
  • shadow 和把变量标记为 mut 是不一样的
    1. 😅如果不使用let关键字 那么重新给非 mut 的变量赋值就会报错
    2. 😅而使用let声明的同名新变量 也是不可变的
    3. 😅使用let声明的同名新变量 他的类型可以与
let spaces = "  ";
let spaces = spaces.len();

println!("{}", spaces); // 4