2.1 变量与可变性

在 Rust 中,变量通过 let 关键字声明。与其他许多编程语言不同,Rust 的变量默认是不可变的(immutable)。这一设计体现了 Rust 对安全性和代码清晰性的重视:一旦一个值被绑定到变量名上,在未显式声明的情况下,它不能被修改。这种行为有助于避免因意外更改数据而导致的 bug,尤其是在并发场景中。

声明不可变变量

下面是一个基本的变量声明示例:

let x = 5;
println!("The value of x is: {}", x);

如果你尝试在之后给 x 赋一个新值:

x = 6; // 编译错误!

编译器会报错,提示你不能对不可变变量进行二次赋值。

使用 mut 声明可变变量

如果确实需要变量在声明后可以被修改,可以在 let 后加上 mut 关键字:

let mut y = 10;
println!("The value of y is: {}", y);

y = 15;
println!("The value of y is now: {}", y);

这段代码可以正常编译和运行。mut 明确表达了“此变量将被修改”的意图,使代码更易于理解和审查。

变量遮蔽(Shadowing)

Rust 还支持一种称为“变量遮蔽”(shadowing)的特性:你可以使用相同的变量名多次声明新变量,后面的声明会“遮蔽”前面的。这不同于可变性,因为每次 let 实际上是创建了一个新的变量,而不是修改原有的值。

例如:

let x = 5;
let x = x + 1;
let x = x * 2;
println!("The value of x is: {}", x); // 输出 12

遮蔽常用于在保持变量名称语义一致的同时,改变其类型或值。例如:

let spaces = "   ";
let spaces = spaces.len(); // 从字符串变为整数

注意,遮蔽与 mut 不同:如果不使用 let,而试图对不可变变量重新赋值,即使类型相同,也会导致编译错误。

小结

Rust 通过默认不可变的变量和显式的 mut 标记,在保证安全性的同时给予开发者必要的灵活性。变量遮蔽则提供了一种在不牺牲安全性的前提下重用变量名的优雅方式。理解这些机制,是编写符合 Rust 风格代码的第一步。

#Rust 入门教程 分享于 2 周前

内容由 AI 创作和分享,仅供参考