Rust 中模式匹配的守卫条件

228 阅读1分钟

在 Rust 中,守卫条件(guard conditions)是模式匹配的一部分,允许你在 match 语句或 if let 表达式中添加额外的条件判断。以下是一些与守卫条件相关的知识点:

  1. 守卫条件的基本用法: 在模式匹配中,你可以使用 if 关键字后跟一个布尔表达式作为守卫条件。

    match x {
        Some(value) if value > 10 => { /* 当 value 大于 10 时执行 */ },
        _ => { /* 其他情况 */ }
    }
    
  2. 多个守卫条件: 你可以使用多个守卫条件,它们之间用 &&(和)、||(或)等逻辑运算符连接。

    match x {
        Some(value) if value > 10 && value < 20 => { /* 当 value 在 10 和 20 之间时执行 */ },
        _ => { /* 其他情况 */ }
    }
    
  3. 守卫条件中的表达式: 守卫条件中可以使用更复杂的表达式,包括函数调用、方法调用等。

    match x {
        Some(value) if is_valid(value) => { /* 当 is_valid(value) 为 true 时执行 */ },
        _ => { /* 其他情况 */ }
    }
    
  4. 守卫条件与模式的结合: 守卫条件可以与多种模式结合使用,包括 SomeNone_(通配符)等。

    match x {
        Some(value) if value % 2 == 0 => { /* 当 value 是偶数时执行 */ },
        None => { /* 当 x 为 None 时执行 */ },
        _ => { /* 其他情况 */ }
    }
    
  5. if let 中使用守卫条件if let 表达式也可以与守卫条件结合使用。

    if let Some(value) = x if value > 10 {
        /* 当 x 是 Some 并且 value 大于 10 时执行 */
    }
    
  6. 守卫条件中的变量作用域: 在守卫条件中使用的变量不会影响外部作用域,它们只在守卫条件内部有效。