模式匹配 控制流運算符——match: 其允許一個值與一系列模式進行匹配,並執行匹配的模式對應的代碼 這些模式可以是字面值、變數名、通配符... 綁定值的模式: 匹配的分支可以綁定到被匹配對象的部分值 因此,可以從 enum 變體中提取值 //綁定值 #[derive(Debug)] enum Us ...
模式匹配
-
控制流運算符——match:
其允許一個值與一系列模式進行匹配,並執行匹配的模式對應的代碼
這些模式可以是字面值、變數名、通配符...
綁定值的模式:
匹配的分支可以綁定到被匹配對象的部分值
因此,可以從 enum 變體中提取值
//綁定值 #[derive(Debug)] enum UsState { Alabama, Alaska, } enum Coin { Penny, Nickel, Dime, Quarter(UsState), } fn value_in_cents(coin: Coin) -> u8 { match coin { Coin::Penny => { println!("Penny"); 1 } Coin::Nickel => 5, Coin::Dime => 10, Coin::Quarter(state) => { println!("State quarter from {:?}!", state); 25 } } } fn main() { let c = Coin::Quarter(UsState::Alaska); println!("{}", value_in_cents(c)); }
匹配 Option
: //匹配Option<T> fn main() { let five = Some(5); let six = plus_one(five); let none = plus_one(None); } fn plus_one(x: Option<i32>) -> Option<i32> { match x { None => None, Some(i) => Some(i + 1), } }
match 匹配必須窮舉所有的可能:
_通配符:替代其餘未列出的值
fn main() { let v = 0u8; match v { 1 => println!("one"), 3 => println!("three"), 5 => println!("five"), 7 => println!("seven"), _ => (), } }
-
if let:
處理時,只關心一種匹配,而忽略其它匹配的情況,其放棄了窮舉的可能:
fn main() { //match let v = Some(0u8); match v { Some(3) => println!("three"), _ => (), } //if let if let Some(3) = v { println!("three"); } else { println!("others"); } }
可以將 if let 看作是 match 的語法糖。
本文來自博客園,作者:LaStHia,轉載請註明原文鏈接:https://www.cnblogs.com/microwang/p/16114545.html