Learn Rust Coding · 课时

变量、可变性与遮蔽

了解如何声明变量、管理可变性,并使用遮蔽灵活地重新定义变量。

第 1 / 3 课11 个步骤

变量、可变性与遮蔽 是 CoddyKit 上的免费 Learn Rust Coding 课时。 这是第 1 节课,共 3 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn Rust Coding 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn Rust Coding 课程共包含 3 节课。

Rust 变量简介

欢迎学习!在 Rust 中,变量是存储数据的基础。它们就像贴有标签的盒子,用来保存程序所需的信息。

Rust 高度重视安全性,而这首先体现在变量的处理方式上。您将学习如何声明变量、控制其可变性,以及如何以巧妙的方式“重新定义”变量。

使用 `let` 声明变量

在 Rust 中,要创建变量,需要使用 let 关键字。它会为一个值指定名称。Rust 通常能够推断类型,因此您不必总是显式指定类型。

请尝试运行这个简单的示例:

fn main() {
  let apples = 5;
  println!("I have {} apples.", apples);
}

Rust 默认的不可变性

Rust 中的一个重要概念是,变量默认不可变。为变量赋值后,之后就不能再更改它。

这可能看起来有些限制,但它有助于避免错误,让代码更安全、更容易理解,尤其是在并发编程中。

使用 `mut` 使变量可变

如果需要更改变量的值,可以在变量名称前使用 mut 关键字,明确将其设为可变。

这会告诉 Rust(以及其他开发者),该变量的值是有意要被更改的。

fn main() {
  let mut score = 100;
  println!("Initial score: {}", score);

  score = 150; // We can change it now!
  println!("New score: {}", score);
}

何时使用 `mut`

虽然 mut 功能强大,但良好的实践是仅在必要时使用它。建议默认优先采用不可变性。

  • 对于计数器、状态变量或确实需要更新的值,请使用 mut。
  • 如果某个值在初次赋值后始终不会改变,请保持其不可变(不要使用 mut)。
  • 清晰性:明确将变量标记为 mut,可以更清楚地表达代码意图。

使用 `const` 定义常量

常量是一种特殊的不可变变量。它们使用 const 关键字而不是 let 声明,并且必须始终显式标注类型。

常量只能设置为常量表达式,不能使用函数调用结果或只能在运行时计算出的值。

fn main() {
  const MAX_USERS: u32 = 10_000; // Type annotation is required!
  println!("Max users allowed: {}", MAX_USERS);
}

`let` 变量与 `const` 常量

下面是 let 变量与 const 常量之间的主要区别:

  • 可变性:let 变量默认不可变,但可以使用 mut 将其设为可变。const 常量始终不可变。
  • 声明:let 使用 let。const 使用 const。
  • 类型标注:let 变量通常可以由系统推断类型。const 常量必须指定类型。
  • 作用域:const 常量可以在任何作用域中声明,包括全局作用域。

引入遮蔽

Rust 允许您使用与之前变量相同的名称声明一个新变量,这称为遮蔽。

新变量会“遮蔽”旧变量,也就是说,后续代码看到的将是新变量的值。旧变量仍存在于内存中,但无法再直接访问。

fn main() {
  let x = 5;
  println!("First x: {}", x); // Outputs 5

  let x = x + 1; // 'x' is shadowed by a new 'x'
  println!("Second x: {}", x); // Outputs 6

  { // Inner scope
    let x = x * 2; // 'x' is shadowed again
    println!("Inner x: {}", x); // Outputs 12
  }
  println!("Outer x: {}", x); // Outputs 6 (inner x is out of scope)
}

使用遮蔽转换类型

遮蔽的一种强大用法是,在保留变量名称不变的同时转换变量的值,甚至转换其类型。当您需要将字符串解析为数字时,这种做法很常见。

您不必创建新的变量名称(例如先使用 string_val,再使用 num_val),而是可以重复使用同一个名称。

fn main() {
  let spaces = "   ";
  println!("Spaces string: '{}'", spaces);

  // Shadow 'spaces' with a new variable that holds its length
  let spaces = spaces.len();
  println!("Spaces count: {}", spaces);
}

快速检查:变量与可变性

请考虑下面的 Rust 代码。最终打印到控制台的 y 值是多少?

变量、可变性与遮蔽回顾

做得很好!您已经学习了 Rust 变量的基础知识:

  • 使用 let 声明变量,变量默认是不可变的。
  • 添加 mut 可使变量变为可变,从而允许更改其值。
  • 使用 const 声明常量。常量始终不可变,并且需要类型标注。
  • 遮蔽允许您使用相同名称声明新变量,从而替代之前的变量。这对于类型转换很有用。

接下来,我们将深入了解 Rust 中各种基本数据类型!

免费开始

用 AI 导师学习 Rust — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
39
课程
144

常见问题解答

「变量、可变性与遮蔽」课时是免费的吗?

是的 — 「变量、可变性与遮蔽」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn Rust Coding 课程的其余内容,请升级到 CoddyKit PRO。 Learn Rust Coding 课程共包含 3 节课。

「变量、可变性与遮蔽」这节课中我会学到什么?

了解如何声明变量、管理可变性,并使用遮蔽灵活地重新定义变量。 你通过在浏览器中直接运行的动手代码来练习 Learn Rust Coding,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Learn Rust Coding 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Learn Rust Coding 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 3 节。

「变量、可变性与遮蔽」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Learn Rust Coding 课中编写并运行代码吗?

能。每节 Learn Rust Coding 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 变量、可变性与遮蔽
  2. 基本数据类型与运算符
  3. 函数与控制流
← 返回 Learn Rust Coding