Skip to content

Rust 中 let 模式匹配

在 Rust 中可以使用 if letwhile letlet else 来进行模式匹配。

if let

if let 语句允许你在条件语句中进行模式匹配,并在匹配成功时执行相应的代码块。

rust
let some_option = Some(5);
if let Some(x) = some_option {
    println!("Matched with value: {}", x);
} else {
    println!("No match");
}

在上面的例子中,如果 some_optionSome(x) 匹配,则会打印匹配的值,否则打印 "No match"。

if let 用于想匹配一种模式,忽略其他模式或者把其余模式归为一类的场景。其中 else 可以省略。

while let

while let 语句允许你在循环中进行模式匹配,并在匹配成功时执行相应的代码块。

rust
let mut stack = vec![1, 2, 3];
while let Some(top) = stack.pop() {
    println!("Popped: {}", top);
}

在上面的例子中,while let 会持续弹出栈顶元素并打印,直到栈为空。while let 类似于正常的 while 循环,里面也可以使用 breakcontinue 等控制流语句。

使用 loop + if let 也可以实现类似的功能:

rust
let mut stack = vec![1, 2, 3];
loop {
    if let Some(top) = stack.pop() {
        println!("Popped: {}", top);
    } else {
        break;
    }
}

let else

let else 语句允许你在变量绑定时进行模式匹配,并在匹配失败时执行 else 块中的代码。else 块中的代码必须是一个终止表达式,比如 returnbreakpanic!

rust
let some_option = Some(5);
let Some(x) = some_option else {
    panic!("No match");
};
println!("Matched with value: {}", x);

在上面的例子中,如果 some_optionSome(x) 匹配,则会继续执行后续代码,否则会调用 panic! 宏终止程序。

let else 相比于 if letwhile let 的好处是,它匹配的变量具有更大的作用域,可以在后续代码中使用。

Released under the MIT License