Rust 程式設計視訊教程(進階)——024_3 所有模式的語法 3

linghuyichong發表於2020-02-17

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

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

1、忽略模式中的值
(1)使用_忽略整個值
例子:

fn foo(_: i32, y: i32) {
    println!("This code only uses the y parameter: {}", y);
}
fn main() {
    foo(3, 4);
}

說明:對函式中的引數使用佔位符,主要是在實現trait的時候使用(如不需要特徵指定函式中的某個引數)。

(2)使用_忽略部分值

let numbers = (2, 4, 8, 16, 32);
match numbers {
    (first, _, third, _, fifth) => {
        println!("Some numbers: {}, {}, {}", first, third, fifth)
    },
}

(3)通過在名字前以一個下劃線開頭來忽略未使用的變數
例子1:

fn main() {
    let _x = 5;
    let y = 10;
}

說明:上述程式碼中,編譯時對未使用y警告,對未使用x不會警告。

只使用 _ 和使用以下劃線開頭的名稱有些微妙的不同:比如_x 仍會將值繫結到變數,而 _ 則完全不會繫結。

例子2:

//會報錯,因為以下劃線開頭的變數仍然會繫結值
let s = Some(String::from("Hello!"));
if let Some(_s) = s {
    println!("found a string");
}
println!("{:?}", s);

例子3:

//不會報錯,因為s的所有權不會移動到\_中
let s = Some(String::from("Hello!"));
if let Some(_) = s {
    println!("found a string");
}
println!("{:?}", s);

(4)用..忽略剩餘值
對於有多個部分的值,可以使用 .. 語法來只使用部分並忽略其它值
例子1:

fn main() {
    let numbers = (2, 4, 8, 16, 32);
    match numbers {
        (first, .., last) => { //自動匹配到第一個和最後一個值
            println!("Some numbers: {}, {}", first, last);
        },
    }
}

例子2:

//下面的例子錯誤,因為..匹配必須是無歧義的
fn main() {
    let numbers = (2, 4, 8, 16, 32);
    match numbers {
        (.., second, ..) => {
            println!("Some numbers: {}", second)
        },
    }
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

令狐一衝

相關文章