变量的隐藏 Shadowing

定义一个与之前变量同名的新变量,而新变量会 隐藏 之前的变量。

示例:

  1. fn main() {
  2. let x = 5;
  3. let x = x + 1;
  4. let x = x * 2;
  5. println!("The value of x is: {}", x);
  6. }

这个程序首先将 x 绑定到值 5 上。接着通过 let x = 隐藏 x,获取初始值并加 1,这样 x 的值就变成 6 了。第三个 let语句也隐藏了 x,将之前的值乘以 2,x 最终的值是 12。

当再次使用 let时,实际上创建了一个新变量,我们可以改变值的类型,但复用这个名字。

const常量

声明常量使用 const关键字而不是 let,并且 必须 注明值的类型

常量可以在任何作用域中声明,包括全局作用域

常量只能被设置为常量表达式,而不能是函数调用的结果,或任何其他只能在运行时计算出的值

示例:

  1. const NUMBER:i32 = 3;
  2. fn main() {
  3. println!("Number {}", NUMBER);
  4. }

表达式与语句

Rust是基于表达式的语言

表达式:

  • 表达式末尾无分号,且返回一个值
  • 函数调用,宏调用,花括号都是表达式
  • 代码块(花括号)的值是其最后一个表达式的值

示例:

  1. let 与 if 语句相结合

    1. let number = if condition {
    2. 5
    3. } else {
    4. "six"
    5. };

    因为 if 语句是一个表达式,所以可以给 let 语句的变量赋值

  2. 代码块的返回值

    1. let y = {
    2. let x = 3;
    3. x + 1
    4. };

    x + 1是语句中最后的表达式并返回了值

语句:

  • 语句Statements)是执行一些操作但不返回值的指令
  • 语句末尾有分号,且没有返回值
  • let x = 3;即是语句