02.25 Rust 編程視頻教程(進階)——022 模式

視頻地址

頭條地址:https://www.ixigua.com/i6775861706447913485

源碼地址

github地址:見擴展鏈接。

講解內容

1、模式是Rust中特殊的語法,模式用來匹配值的結構。

2、模式由如下內容組成:(1)字面值(2)解構的數組、枚舉、結構體或者元組(3)變量(4)通配符(5)佔位符

3、在Rust中,可能用到模式的位置(1)match分支匹配方式:

<code>match VALUE {    PATTERN => EXPRESSION,    PATTERN => EXPRESSION,    PATTERN => EXPRESSION,}/<code>

要點:所有情況要匹配完全(即,必須窮盡所有情況),否則報錯

例子:

<code>fn main() {    let a = 1;    match a {        0 => println!("zero"),        1 => println!("one"),        _ => println!("other"),//這一句如果註釋掉會報錯    };}/<code>

(2)if let條件表達式有選擇的匹配,if let 表達式其窮盡性沒有為編譯器所檢查。例子:

<code>fn main() {    let color: Option = None;    let is_ok = true;    let age: Result = "33".parse();    if let Some(c) = color {        println!("color = {}", c);    } else if is_ok {        println!("is ok? {}", is_ok);    } else if let Ok(a) = age {        if a > 30 {            println!("oh, mature man");        } else {            println!("oh, young man");        }    } else {        println!("in else");    }}/<code>

(3)while let允許只要模式匹配就一直進行 while 循環。例子:

<code>fn main() {    let mut stack = Vec::new();     stack.push(1);     stack.push(2);     stack.push(3);     while let Some(top) = stack.pop() {         println!("{}", top);     }}/<code>

在上述例子中,一直匹配Some(value),只要匹配就一直循環。

(4)for循環在 for 循環中,模式是 for 關鍵字直接跟隨的值,正如 for x in y 中的 x。例子:

<code>fn main() {    let v = vec!['a', 'b', 'c'];     for (index, value) in v.iter().enumerate() {         println!("{} is at index {}", value, index);     }}/<code>

說明:這裡的模式為(index, value),enumerate 方法適配一個迭代器來產生一個值和其在迭代器中的索引,它們位於一個元組中。第一個 enumerate 調用會產生元組 (0, ‘a’)。當這個值匹配模式 (index, value),index 將會是 0 而 value 將會是 ‘a’,並打印出第一行輸出。

(5)let語句

<code>let PATTERN = EXPRESSION;/<code>

例子:

<code>let (x, y, z) = (1,2,3);/<code>

說明:(1,2,3)匹配模式(x,y,z),會把 1 綁定到 x,2 綁定到 y 並將 3 綁定到 z。如果希望忽略元組中一個或多個值,也可以使用 _ 或 ..

例子:

<code>let (x, .., y) = (1, 2, 3);println!("x: {}, y: {}", x, y);/<code>

(6)函數參數函數的參數也是模式。例子:

<code>fn print_point(&(x, y): &(i32, i32)) {     println!("p: ({}, {})", x, y);} fn main() {     let point = (3, 5);     print_point(&point); }/<code>

說明:值 &(3, 5) 會匹配模式 &(x, y),如此 x 得到了值 3,而 y得到了值 5。

4、模式在每個使用它的地方並不以相同的方式工作;在一些地方,模式必須是 irrefutable (不可反駁)的,意味著他們必須匹配所提供的任何值。在另一些情況,則是 refutable 的。


分享到:


相關文章: