while let

if let 类似,while let 可以简化繁琐的 match 序列。让我们来看一个递增 i 的例子:

#![allow(unused)] fn main() { // 创建 `Option<i32>` 类型的 `optional` let mut optional = Some(0); // 重复执行此测试。 loop { match optional { // 如果 `optional` 解构成功,则执行代码块。 Some(i) => { if i > 9 { println!("大于 9,退出!"); optional = None; } else { println!("`i` 是 `{:?}`。再试一次。", i); optional = Some(i + 1); } // ^ 需要 3 层缩进! }, // 当解构失败时退出循环: _ => { break; } // ^ 为什么需要这样?一定有更好的方法! } } }

使用 while let 可以让这个序列更加简洁:

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

另请参阅:

enumOptionRFC