配對守衛
配對時,您可以為模式新增「守衛」。這是任意的布林運算式,會在模式配對成功時執行:
#[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 運算式中使用模式內定義的變數。
- 只要運算式隸屬於具備
|
的模式之中,就會套用守衛定義的條件。