Rust 学习笔记(3)-变量与可变性

本篇是阅读 《Rust 程序设计语言》第3.1 变量与可变性 而来的结果

变量默认是不可改变的,如果声明一个变量不会变,它就真的不会变

所以你不必自己跟踪它,你不必担心它会在其他地方被改变,因此它能让你的代码更易于推导

我知道你肯定会问,这和常量有什么区别?

  1. 首先,不允许对常量使用 mut 常量不光默认不能变,它总是不能变
  2. 声明常量使用 const 关键字而不是 let,并且必须注明值的类型
  3. 常量可以在任何作用域中声明,包括全局作用域
  4. 常量只能被设置为常量表达式,而不可以是其他任何只能在运行时计算出的值

大多数时候,我们希望变量是可变的,我们可以使用 mut 关键字来声明一个可变变量,这个时候这个变量就和我们常说的变量等价了

完整代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
fn main() {
    //let x = 5;
    //println!("The value of x is: {}", x);
    //x = 6; // 这里会报错,不能对不可变变量 x 二次赋值(cannot assign twice to immutable variable x)。
    // Rust 编译器保证,如果声明一个值不会变,它就真的不会变。
    // 这意味着当阅读和编写代码时,不需要追踪一个值如何和在哪可能会被改变,从而使得代码易于推导。
    //println!("The value of x is: {}", x);

    // 不过可变性也是非常有用的。变量只是默认不可变;正如在第二章所做的那样,你可以在变量名之前加 mut 来使其可变。
    // 除了允许改变值之外,mut 向读者表明了其他代码将会改变这个变量值的意图。
    let mut x = 5;
    println!("This value of x is: {}", x);
    x = 6;
    println!("This value of x is: {}", x);

    // 不允许改变值的变量,可能会使你想起另一个大部分编程语言都有的概念:常量(constants)。
    // 不过常量与变量还是有一些区别。

    // 首先,不允许对常量使用 mut。常量不光默认不能变,它总是不能变。
    // 声明常量使用 const 关键字而不是 let,并且 必须 注明值的类型。
    // 常量可以在任何作用域中声明,包括全局作用域,这在一个值需要被很多部分的代码用到时很有用。
    // 最后一个区别是,常量只能被设置为常量表达式,而不能是函数调用的结果,或任何其他只能在运行时计算出的值。
    // 下面是一个常量的例子
    const MAX_POINTS: u32 = 100_000;
    println!("This const of MAX_POINTS is: {}", MAX_POINTS);

    // 我们可以定义一个与之前变量同名的新变量,而新变量会 隐藏 之前的变量。
    // Rustacean 们称之为第一个变量被第二个 隐藏 了,这意味着使用这个变量时会看到第二个值。
    // 隐藏与将变量标记为 mut 是有区别的。当不小心尝试对变量重新赋值时,如果没有使用 let 关键字,就会导致编译时错误。
    // 通过使用 let,我们可以用这个值进行一些计算,不过计算完之后变量仍然是不变的。
    let y = 5;
    let y = y + 1;
    let y = y * 2;
    println!("This value of y is: {}", y);

    // mut 与隐藏的另一个区别是,当再次使用 let 时,实际上创建了一个新变量,我们可以改变值的类型,但复用这个名字。
    let spaces = "   ";
    let spaces = spaces.len();
    println!("This value of spaces is: {}", spaces);
}

在这一节中,主要涉及的有变量的可变性常量隐藏 这三个知识点

updatedupdated2025-03-012025-03-01