Skip to content

Rust 基础语法概览

变量、基本类型、函数、注释和控制流,几乎是每种编程语言都有的概念。Rust 在这些概念上既有大家熟悉的一面,也有自身特点(例如默认不可变绑定、表达式导向的控制流等)。本章用极简示例串起这些主题,细节请参阅对应专章。

变量

let 绑定名字到值;默认不可变,需要修改时使用 mut

rust
fn main() {
    let x = 10;
    let mut y = 0;
    y += x;
    println!("{y}");
}

详见:变量

基本类型

常见标量包括整数(如 i32u8)、浮点(f32f64)、boolchar;多个值可组成元组、数组等。类型多可推导,也可显式标注。

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(与模式匹配配合)。循环有 loopwhilefor

rust
fn main() {
    let x = 7;
    if x > 5 {
        println!("较大");
    } else {
        println!("较小或相等");
    }

    for i in 0..3 {
        print!("{i} ");
    }
    println!();
}

详见:控制流循环


关键字、保留字与弱关键字

编译器把部分拼写固定为语法记号:这些词不能随意用作变量名、函数名等标识符,否则会产生语法冲突或歧义。Rust 参考手册把它们分为三类。

严格关键字(strict keywords)

作用:在语言中有确定语法含义,只能出现在合法的语法位置上,不能用作普通标识符(如绑定名、结构体名等)。

下列严格关键字在所有 Edition 中均有效(含 _ 这一特殊记号,常用于「故意不用」的绑定或模式):

asasyncawaitbreakconstcontinuecratedynelseenumexternfalsefnforifimplinletloopmatchmodmovemutpubrefreturnselfSelfstaticstructsupertraittruetypeunsafeusewherewhile_

按用途可粗略归类(同一词可能参与多种语法,此处仅帮助记忆):

类别关键字(节选)说明
绑定与可变性letmutrefconststatic声明绑定、可变性、引用模式、常量与静态项
控制流ifelsematchforwhileloopbreakcontinuereturn分支、循环与提前返回
项与类型fnstructenumtypetraitimplmodusepubunsafeexternwhere定义函数、类型、trait、模块及可见性等
路径与解析cratesuperselfSelfasdyn路径、别名、trait 对象等
字面量与运算符语境truefalseinmoveasyncawait布尔字面量、for 范围、async 块等
通配 / 忽略_模式中表示「不关心」或数值分隔等

Edition 说明asyncawaitdyn2018 Edition 起作为严格关键字使用;新项目默认使用较新 Edition,与旧版差异见官方 Edition 指南

保留字(reserved keywords)

作用:当前版本尚未赋予语法含义,但已被语言保留,同样不能用作普通标识符。这样将来为语言增加新语法时,旧代码不会因新关键字与已有名字冲突而静默破坏,即向前兼容

当前保留字包括:

abstractbecomeboxdofinalgenmacrooverrideprivtrytypeofunsizedvirtualyield

其中 try2018 Edition 起保留;gen2024 Edition 起保留。若你使用的 Edition 较旧,以 rustc 实际报错与参考手册 · Keywords为准。

弱关键字(weak keywords)

作用仅在特定语法上下文中才是关键字;在其它位置仍可作为标识符使用(例如在未启用 union 声明语法的老语境外,部分名字曾可与普通标识符共存——具体规则以参考手册为准)。

包括:'staticmacro_rulesrawsafeunion 等。编写宏、union 类型、unsafe 块外的 FFI 等时会遇到;入门阶段知道「存在上下文相关关键字」即可。

小结

类别能否当普通标识符典型作用
严格关键字构成当前 Rust 语法
保留字预留给未来语法,保证升级兼容
弱关键字多数情况下可以(依上下文)在特定构造中充当记号

完整、随版本更新的列表以 The Rust Reference · Keywords 为准。

接下来读什么

在熟悉上述轮廓后,建议按侧边栏顺序阅读:变量数据结构运算符函数注释控制流,再进入所有权等 Rust 特色章节。