Rust 程式設計影片教程(進階)——024_4 所有模式的語法 4

linghuyichong發表於2020-02-17

頭條地址:https://www.ixigua.com/i677586170644791348...
B站地址:https://www.bilibili.com/video/av81202308/

github地址:https://github.com/anonymousGiga/learn_rus...

1、匹配守衛提供的額外的條件
匹配守衛是一個指定於match分支模式之後的額外的if條件,它必須滿足才能選擇此分支。
例子1:

let num = Some(4);
match num {
    Some(x) if x < 5 => println!("less than five: {}", x),   //匹配守衛
    Some(x) => println!("{}", x),
    None => (),
}

例子2:

fn main() {
    let x = Some(5);
    let y = 10;    //位置1
    match x {
        Some(50) => println!("Got 50"),
        Some(n) if n == y => println!("Matched, n = {}", n),  //此處的y就是位置1處的y,不是額外建立的變數
        _ => println!("Default case, x = {:?}", x),
    }
    println!("at the end: x = {:?}, y = {}", x, y);
}

例子3:

let x = 4;
let y = false;

match x {
    4 | 5 | 6 if y => println!("yes"), //等價於(4 | 5 | 6) if y => println!("yes"),
    _ => println!("no"),
}

2、繫結
@運算子允許我們在建立一個存放值的變數,並且測試這個變數的值是否匹配模式。
例子:

enum Message {
    Hello { id: i32 },
}

let msg = Message::Hello { id: 5 };

match msg {
    Message::Hello { id: id_variable @ 3..=7 } => {  //建立id_variable 存放id的值,同時測試值是否在3到7的範圍
        println!("Found an id in range: {}", id_variable)
    },
    Message::Hello { id: 10..=12 } => {
        println!("Found an id in another range")
    },
    Message::Hello { id } => {
        println!("Found some other id: {}", id)
    },
}

3、作業:自己編寫一個使用@繫結並且測試值的例子。

本作品採用《CC 協議》,轉載必須註明作者和本文連結
令狐一衝

相關文章