变量

在 rust 中,用 let 声明的变量默认是不可变的。
image.png
需要使用可变变量时,需要加入 mut 进行声明。
image.png

常量

可以用 const 关键字来声明常量,常量和不可变变量依然有区别:

  • 不允许对常量使用 mut,它总是不可变
  • 必须标明值的类型
  • 只能是预先计算出的常量值,不能是运行时计算的值

常量通常用于声明全局的值。

隐藏(shadowing)

image.png
在同一个作用域中,使用 let 再次声明同名变量可以实现“隐藏”之前的变量,并且在作用域结束时,此作用域中的 shadowing 作用域也一并结束。
因此第 4 行会将前一步 x 声明 shadowing 为 6。在下一个作用域中 shadowing 为 12,并且在 println 宏执行完成,作用域结束后,又变回第 4 行的 6。
mut 和 shadowing 是有区别的,shadowing 可以改变变量的类型,但 mut 不可以,这个特性通常用于减少不必要的变量重命名中。例如,假设程序请求用户输入空格字符来说明希望在文本之间显示多少个空格,然而我们真正需要的是将输入存储成数字(多少个空格)

  1. let spaces = " ";
  2. let spaces = spaces.len();

Q&A

什么场景下需要使用不可变变量而不是常量?

不可变变量不能直接修改它的值,但可以利用 shadowing 特性实现相同变量名的不同值,方便在执行过程中利用不可变变量创建临时值,而不必声明太多冗余的变量。
常量通常用于全局唯一,不会变化的值,可以是应用的配置,需要多处复用的值等等。