配對守衛

配對時,您可以為模式新增「守衛」。這是任意的布林運算式,會在模式配對成功時執行:

#[rustfmt::skip]
fn main() {
    let pair = (2, -2);
    println!("Tell me about {pair:?}");
    match pair {
        (x, y) if x == y     => println!("These are twins"),
        (x, y) if x + y == 0 => println!("Antimatter, kaboom!"),
        (x, _) if x % 2 == 1 => println!("The first one is odd"),
        _                    => println!("No correlation..."),
    }
}

重點:

  • 有些概念比模式本身所允許的更加複雜,如果我們希望簡要地表達這些想法,就必須把配對守衛視為獨立的語法功能。
  • 這與配對分支內的個別 if 運算式不同。分支區塊中的 if 運算式 (位於 => 之後) 會在選取配對分支後發生。即使該區塊內的 if 條件失敗,系統也不會考量原始 match 運算式的其他分支。
  • 您可以在 if 運算式中使用模式內定義的變數。
  • 只要運算式隸屬於具備 | 的模式之中,就會套用守衛定義的條件。