【Rust】分支语句详解

在 Rust 中,分支语句用于根据条件执行不同的代码路径。Rust 主要提供以下几种分支结构:

1. if 语句

最基本的条件分支,与大多数语言类似:

rust 复制代码
fn main() {
    let number = 7;

    if number < 5 {
        println!("条件为真");
    } else {
        println!("条件为假");
    }
}

多条件分支

rust 复制代码
fn main() {
    let number = 6;

    if number % 4 == 0 {
        println!("能被4整除");
    } else if number % 3 == 0 {
        println!("能被3整除");
    } else {
        println!("其他情况");
    }
}

2. if 表达式(在 Rust 中是表达式!)

Rust 的 if 可以返回值,这使得它非常强大:

rust 复制代码
fn main() {
    let condition = true;
    
    // if 作为表达式使用
    let number = if condition {
        5  // 注意:没有分号
    } else {
        6  // 两个分支必须返回相同类型
    };
    
    println!("number 的值为: {}", number);
}

3. match 表达式

match 是 Rust 中最强大的分支语句,类似于其他语言的 switch,但功能更强大:

rust 复制代码
fn main() {
    let value = 3;

    match value {
        1 => println!("一"),
        2 => println!("二"),
        3 => println!("三"),
        _ => println!("其他数字"), // _ 是通配符
    }
}

match 返回值的例子:

rust 复制代码
fn main() {
    let number = 2;
    
    let description = match number {
        1 => "一",
        2 => "二",
        3 => "三",
        _ => "其他",
    };
    
    println!("{}", description);
}

范围匹配

rust 复制代码
fn main() {
    let age = 25;
    
    match age {
        0..=18 => println!("未成年"),
        19..=60 => println!("成年"),
        _ => println!("老年"),
    }
}

模式匹配(解构)

rust 复制代码
enum Message {
    Quit,
    Move { x: i32, y: i32 },
    Write(String),
}

fn main() {
    let msg = Message::Move { x: 10, y: 20 };
    
    match msg {
        Message::Quit => println!("退出"),
        Message::Move { x, y } => println!("移动到 ({}, {})", x, y),
        Message::Write(text) => println!("写入: {}", text),
    }
}

4. if let 语法糖

用于处理只关心一种匹配情况时的简化写法:

rust 复制代码
fn main() {
    let some_option_value = Some(3);
    
    // 传统 match 写法
    match some_option_value {
        Some(3) => println!("值是3"),
        _ => (),
    }
    
    // 使用 if let 简化
    if let Some(3) = some_option_value {
        println!("值是3");
    }
}

结合 else

rust 复制代码
fn main() {
    let some_value: Option<i32> = None;
    
    if let Some(x) = some_value {
        println!("值是: {}", x);
    } else {
        println!("没有值");
    }
}

5. while let 循环匹配

类似于 if let,但在循环中使用:

rust 复制代码
fn main() {
    let mut stack = Vec::new();
    stack.push(1);
    stack.push(2);
    stack.push(3);
    
    // 只要 pop 返回 Some,就继续循环
    while let Some(top) = stack.pop() {
        println!("{}", top);
    }
}

重要特点

  1. 完备性检查match 必须处理所有可能情况
  2. 模式绑定:可以直接在分支中提取值
  3. 守卫条件:可以在模式后添加额外的条件检查
rust 复制代码
match number {
    x if x < 0 => println!("负数"),
    0 => println!("零"),
    x if x > 0 => println!("正数"),
    _ => unreachable!(), // 实际上不会执行到这里
}

这些分支语句使 Rust 的模式匹配功能非常强大,是 Rust 语言的核心特性之一。

相关推荐
梦醒沉醉17 小时前
4、Rust参考手册——Crate和源文件
rust
chainbees17 小时前
Windows 系统 Rust 运行环境搭建
rust
k4m7v2pz20 小时前
从 Python 搬到 Rust:pyglet MIDI DAW 变成 egui 鬼畜采样器的迁移复盘
开发语言·python·rust
小灰灰搞电子21 小时前
Rust+Slint 实现ModbusRTU从机调试助手源码分享
开发语言·rust·modbusrtu
Source.Liu1 天前
Tauri 2.0 + Alpine.js 起步笔记(零构建方案)
rust
小灰灰搞电子1 天前
Rust+Slint 实现抽屉式侧边栏源码分享
开发语言·rust·侧边栏
码艺-Alimjan1 天前
Tauri 2.x + Vue 3 桌面应用开发实战:从踩坑到完美落地
前端·javascript·vue.js·rust·typescript·go
右耳朵猫AI1 天前
Node.js周刊2026W36 | NestJS 12发布、Remix 3 RC、pnpm 12 Rust重写、Node.js 26.8.0
开发语言·rust·node.js
右耳朵猫AI1 天前
Web前端周刊2026W36 | pnpm 12 Rust 重写、Remix 3 RC、Node.js 26.8.0、htmx 4.0 大版本
前端·rust·node.js