1149 字
6 分钟
study 2day pro
🦀 Rust 控制流 (进阶版教程)
作者:xiaolin 适用范围:有一定 Rust 基础,想深入理解控制结构与表达式机制。
目录
- 控制流概述
- if 表达式
- loop 循环
- while 循环
- for 循环
- 控制关键字:break / continue / return
- 标签循环(Labeled Loops)
- match 模式匹配
- if let / while let 表达式
- 控制流中的表达式特性
- 实践建议
🧭 控制流概述
Rust 中所有控制结构(if、match、loop 等)都是 表达式,即都有返回值。
区别于 C / Go 语言的语句式风格,Rust 的控制流是 函数式表达式风格:
let number = if true { 100 } else { 200 };println!("{}", number); // 输出 100🧩 if 表达式
基本用法
let x = 10;if x > 5 { println!("x 大于 5");} else { println!("x 小于等于 5");}表达式返回值
let result = if x % 2 == 0 { "even" } else { "odd" };println!("x 是 {}", result);⚠️ 注意:
if/else分支的返回值类型必须一致。
❌ 错误示例:
let value = if true { 10 } else { "hello" }; // ❌ 类型不一致🔁 loop 循环
loop 表示无限循环,直到 break 被显式调用。
let mut count = 0;loop { count += 1; if count == 3 { println!("退出循环"); break; }}loop 的返回值
Rust 的 loop 可以返回值!(高级特性)
let result = loop { let value = 42; break value * 2;};
println!("结果: {}", result); // 84⚙️ while 循环
当条件为真时执行循环:
let mut n = 0;while n < 5 { println!("n = {}", n); n += 1;}与 loop 相比,while 自动判断条件退出。
🔄 for 循环
Rust 的 for 是基于 迭代器 的高级循环结构。
遍历区间
for i in 0..5 { println!("i = {}", i);}
0..5表示[0, 1, 2, 3, 4]0..=5表示[0, 1, 2, 3, 4, 5]
遍历集合
let arr = [10, 20, 30];for val in arr.iter() { println!("val = {}", val);}遍历并索引
for (i, val) in arr.iter().enumerate() { println!("第 {} 个值: {}", i, val);}🚪 控制关键字
break
终止当前循环。
for i in 0..10 { if i == 5 { break; } println!("i = {}", i);}continue
跳过当前迭代,进入下一轮。
for i in 0..5 { if i == 2 { continue; } println!("i = {}", i);}return
退出当前函数。
fn calc() -> i32 { for i in 0..10 { if i == 3 { return i * 10; } } 0}🏷️ 标签循环
Rust 支持多层循环时的 带标签跳出(非常强大):
let mut outer = 0;
'outer_loop: loop { let mut inner = 0;
loop { if inner == 2 { break; // 只跳出内层 } if outer == 1 { break 'outer_loop; // 跳出外层循环 } inner += 1; }
outer += 1;}
println!("外层结束: {}", outer);🎯 match 模式匹配
match 是 Rust 中比 switch 更强大的控制结构。
let status = 200;
match status { 200 => println!("OK"), 404 => println!("Not Found"), 500 => println!("Server Error"), _ => println!("Unknown"),}模式匹配绑定变量
let age = 20;
match age { 0..=12 => println!("儿童"), 13..=19 => println!("青少年"), 20..=30 => println!("青年"), _ => println!("成年人"),}多分支合并
match status { 200 | 201 => println!("Success"), 400 | 404 => println!("Client Error"), _ => println!("Other"),}🔍 if let / while let
这两个语法是 match 的语法糖,用于匹配单个模式。
if let
let some_value = Some(10);
if let Some(v) = some_value { println!("值为: {}", v);} else { println!("为 None");}while let
let mut stack = vec![1, 2, 3];
while let Some(top) = stack.pop() { println!("弹出: {}", top);}🧠 控制流中的表达式特性
Rust 的所有控制语句都是 表达式(Expression),意味着可以直接用于赋值:
let grade = match 85 { 90..=100 => "A", 80..=89 => "B", 70..=79 => "C", _ => "D",};
println!("成绩等级: {}", grade);🪄 实践建议
| 场景 | 建议写法 | 理由 |
|---|---|---|
| 简单条件 | if | 清晰简洁 |
| 多条件枚举 | match | 可读性高 |
| 无限循环 | loop + break value | 支持返回值 |
| 嵌套循环 | 标签 + break 'outer | 避免逻辑混乱 |
| 解构枚举 | if let / match | Rust 最推荐模式 |
🧩 示例:综合应用
fn main() { let mut n = 0;
'counting: loop { println!("当前 n: {}", n); n += 1;
if n == 3 { println!("跳过一次循环"); continue; }
match n { 5 => { println!("达到 5,退出外层循环"); break 'counting; }, _ => println!("继续循环中..."), } }
println!("循环结束,最终 n = {}", n);}输出:
当前 n: 0继续循环中...当前 n: 1继续循环中...当前 n: 2跳过一次循环当前 n: 3继续循环中...当前 n: 4达到 5,退出外层循环循环结束,最终 n = 5✅ 总结
| 控制结构 | 特点 |
|---|---|
if / else | 表达式,有返回值 |
loop | 无限循环,可返回值 |
while | 条件循环 |
for | 基于迭代器 |
break / continue | 控制循环执行 |
'label | 多层循环跳出 |
match | 强大的模式匹配 |
if let / while let | match 简化形式 |
study 2day pro
https://iqwq.com/posts/rust/study-2day-pro/