Appearance
Rust 基础语法概览
变量、基本类型、函数、注释和控制流,几乎是每种编程语言都有的概念。Rust 在这些概念上既有大家熟悉的一面,也有自身特点(例如默认不可变绑定、表达式导向的控制流等)。本章用极简示例串起这些主题,细节请参阅对应专章。
变量
用 let 绑定名字到值;默认不可变,需要修改时使用 mut。
rust
fn main() {
let x = 10;
let mut y = 0;
y += x;
println!("{y}");
}详见:变量。
基本类型
常见标量包括整数(如 i32、u8)、浮点(f32、f64)、bool 与 char;多个值可组成元组、数组等。类型多可推导,也可显式标注。
rust
fn main() {
let n: i32 = 42;
let pi = 3.14; // 推断为 f64
let ok = true;
let tup: (i32, char) = (1, 'A');
println!("{} {} {:?} {:?}", n, pi, ok, tup);
}函数
使用 fn 定义;参数须标注类型(除非在可推断的闭包等上下文中);返回值类型写在 -> 之后,无返回值时可写 -> () 或省略(单元类型 ())。
rust
fn add(a: i32, b: i32) -> i32 {
a + b // 末尾表达式作为返回值(无分号)
}
fn main() {
println!("{}", add(2, 3));
}详见:函数。
注释
行注释以 // 开头;块注释为 /* ... */;文档注释使用 /// 或 //!,可由 rustdoc 生成文档。
rust
//! crate 级说明(常用于 lib 根)
/// 对下一项的文档注释
fn demo() {
// 行注释
let _x = 1; /* 块注释 */
}详见:注释。
控制流
条件分支用 if(条件须为 bool,不要求括号包裹条件);多分支可用 match(与模式匹配配合)。循环有 loop、while、for。
rust
fn main() {
let x = 7;
if x > 5 {
println!("较大");
} else {
println!("较小或相等");
}
for i in 0..3 {
print!("{i} ");
}
println!();
}关键字、保留字与弱关键字
编译器把部分拼写固定为语法记号:这些词不能随意用作变量名、函数名等标识符,否则会产生语法冲突或歧义。Rust 参考手册把它们分为三类。
严格关键字(strict keywords)
作用:在语言中有确定语法含义,只能出现在合法的语法位置上,不能用作普通标识符(如绑定名、结构体名等)。
下列严格关键字在所有 Edition 中均有效(含 _ 这一特殊记号,常用于「故意不用」的绑定或模式):
as、async、await、break、const、continue、crate、dyn、else、enum、extern、false、fn、for、if、impl、in、let、loop、match、mod、move、mut、pub、ref、return、self、Self、static、struct、super、trait、true、type、unsafe、use、where、while、_
按用途可粗略归类(同一词可能参与多种语法,此处仅帮助记忆):
| 类别 | 关键字(节选) | 说明 |
|---|---|---|
| 绑定与可变性 | let、mut、ref、const、static | 声明绑定、可变性、引用模式、常量与静态项 |
| 控制流 | if、else、match、for、while、loop、break、continue、return | 分支、循环与提前返回 |
| 项与类型 | fn、struct、enum、type、trait、impl、mod、use、pub、unsafe、extern、where | 定义函数、类型、trait、模块及可见性等 |
| 路径与解析 | crate、super、self、Self、as、dyn | 路径、别名、trait 对象等 |
| 字面量与运算符语境 | true、false、in、move、async、await | 布尔字面量、for 范围、async 块等 |
| 通配 / 忽略 | _ | 模式中表示「不关心」或数值分隔等 |
Edition 说明:async、await、dyn 在 2018 Edition 起作为严格关键字使用;新项目默认使用较新 Edition,与旧版差异见官方 Edition 指南。
保留字(reserved keywords)
作用:当前版本尚未赋予语法含义,但已被语言保留,同样不能用作普通标识符。这样将来为语言增加新语法时,旧代码不会因新关键字与已有名字冲突而静默破坏,即向前兼容。
当前保留字包括:
abstract、become、box、do、final、gen、macro、override、priv、try、typeof、unsized、virtual、yield
其中 try 在 2018 Edition 起保留;gen 在 2024 Edition 起保留。若你使用的 Edition 较旧,以 rustc 实际报错与参考手册 · Keywords为准。
弱关键字(weak keywords)
作用:仅在特定语法上下文中才是关键字;在其它位置仍可作为标识符使用(例如在未启用 union 声明语法的老语境外,部分名字曾可与普通标识符共存——具体规则以参考手册为准)。
包括:'static、macro_rules、raw、safe、union 等。编写宏、union 类型、unsafe 块外的 FFI 等时会遇到;入门阶段知道「存在上下文相关关键字」即可。
小结
| 类别 | 能否当普通标识符 | 典型作用 |
|---|---|---|
| 严格关键字 | 否 | 构成当前 Rust 语法 |
| 保留字 | 否 | 预留给未来语法,保证升级兼容 |
| 弱关键字 | 多数情况下可以(依上下文) | 在特定构造中充当记号 |
完整、随版本更新的列表以 The Rust Reference · Keywords 为准。
接下来读什么
在熟悉上述轮廓后,建议按侧边栏顺序阅读:变量 → 数据结构 → 运算符 → 函数 → 注释 → 控制流,再进入所有权等 Rust 特色章节。