1149 字
6 分钟
study 2day pro
2025-11-03

🦀 Rust 控制流 (进阶版教程)#

作者:xiaolin 适用范围:有一定 Rust 基础,想深入理解控制结构与表达式机制。


目录#

  1. 控制流概述
  2. if 表达式
  3. loop 循环
  4. while 循环
  5. for 循环
  6. 控制关键字:break / continue / return
  7. 标签循环(Labeled Loops)
  8. match 模式匹配
  9. if let / while let 表达式
  10. 控制流中的表达式特性
  11. 实践建议

🧭 控制流概述#

Rust 中所有控制结构(ifmatchloop 等)都是 表达式,即都有返回值。

区别于 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 / matchRust 最推荐模式

🧩 示例:综合应用#

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 letmatch 简化形式
study 2day pro
https://iqwq.com/posts/rust/study-2day-pro/
作者
Xiaolin
发布于
2025-11-03
许可协议
CC BY-NC-SA 4.0