if let 与 while let
简洁的匹配
if let 与 while let 是 CoddyKit 上的免费 Learn Rust Coding 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn Rust Coding 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn Rust Coding 课程共包含 4 节课。
简洁匹配
有时您只关心一种模式。if let 和 while let 可以在不写完整 match 的情况下进行简洁匹配。
if let 形式
只有当值匹配某个模式时,if let 才会运行代码块,并绑定捕获到的任何数据。
fn main() {
let maybe = Some(10);
if let Some(n) = maybe {
println!("value is {n}");
}
}if let 与 match
if let 相当于只包含一个重要分支、并以 _ => () 处理其他情况的 match。当其他情况无需处理时,请使用它。
fn main() {
let config: Option<i32> = None;
// match equivalent would have an empty _ arm
if let Some(v) = config {
println!("configured: {v}");
}
println!("done");
}添加 else
附加 else,即可处理不匹配的情况。
fn main() {
let result: Result<i32, String> = Err("boom".to_string());
if let Ok(v) = result {
println!("ok: {v}");
} else {
println!("failed");
}
}let else
let ... else 会在模式匹配时进行绑定,否则运行一个发散代码块(例如 return)。它非常适合提前退出。
fn parse(s: &str) -> i32 {
let Ok(n) = s.parse::<i32>() else {
println!("not a number");
return 0;
};
n * 2
}
fn main() {
println!("{}", parse("21"));
println!("{}", parse("oops"));
}while let 形式
只要值持续匹配某个模式,while let 就会不断循环。它非常适合耗尽栈等数据结构。
fn main() {
let mut stack = vec![1, 2, 3];
while let Some(top) = stack.pop() {
println!("popped {top}");
}
}遍历迭代器
while let 可以通过反复调用 next 进行迭代,并在返回 None 时停止。
fn main() {
let mut iter = [10, 20, 30].into_iter();
while let Some(x) = iter.next() {
println!("{x}");
}
}在 if let 中使用守卫
可以添加 && 条件(Rust 2024)来组合守卫,也可以在其中嵌套一个 if。
fn main() {
let value = Some(8);
if let Some(n) = value {
if n > 5 {
println!("big: {n}");
}
}
}如何选择
参考原则:
if let——处理一种模式,忽略其余情况let else——绑定,或提前退出while let——只要模式持续匹配就循环match——需要处理多种情况时使用
可读性权衡
这些形式可以减少样板代码,但也可能隐藏某些情况。如果您发现自己需要处理多个模式,请改用完整的 match,以提高可读性。
嵌套 if let
通过嵌套 if let,您可以逐层解包可选值。
fn main() {
let outer: Option<Option<i32>> = Some(Some(99));
if let Some(inner) = outer {
if let Some(value) = inner {
println!("value is {value}");
}
}
}快速检查
哪种结构会在值持续匹配某个模式时,反复运行循环主体?
回顾
您学习了简洁匹配:
if let处理单个模式,也可以选择使用elselet else会绑定,或提前发散退出while let会在模式匹配时循环- 需要处理多种情况时,改用
match
常见问题解答
「if let 与 while let」课时是免费的吗?
是的 — 「if let 与 while let」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn Rust Coding 课程的其余内容,请升级到 CoddyKit PRO。 Learn Rust Coding 课程共包含 4 节课。
「if let 与 while let」这节课中我会学到什么?
简洁的匹配 你通过在浏览器中直接运行的动手代码来练习 Learn Rust Coding,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Learn Rust Coding 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Learn Rust Coding 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「if let 与 while let」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Learn Rust Coding 课中编写并运行代码吗?
能。每节 Learn Rust Coding 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 深入理解 match
- if let 与 while let
- 使用 @ 进行绑定
- 解构