变量、可变性与遮蔽
了解如何声明变量、管理可变性,并使用遮蔽灵活地重新定义变量。
变量、可变性与遮蔽 是 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 反馈 — 无需本地设置。
此课程中的所有课时
- 变量、可变性与遮蔽
- 基本数据类型与运算符
- 函数与控制流