欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

rust中的match表達式使用詳解

 更新時間:2023年08月01日 10:23:42   作者:每天都要加油呀!  
在rust中提供了一個極為強大的控制流運算符match,這篇文章主要介紹了rust中的match表達式,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

match使用

在rust中提供了一個極為強大的控制流運算符match

  • match允許一個值與一系列模式進行匹配,并執(zhí)行匹配的模式對應(yīng)的代碼
  • 這些模式可以是子面值、變量名、通配符等等

來個例子

fn main() {
    println!("penny {}", value_in_cents(Coin::Penny)) // penny 1
}
enum Coin {
    Penny,
    Nickel,
    Dime,
    Quarter,
}
fn value_in_cents(coin: Coin) -> u8 {
    match coin {
        Coin::Penny => 1,
        Coin::Nickel => 5,
        Coin::Dime => 10,
        Coin::Quarter => {
            println!("多行的情況需要加上花括號");
            25
        },
    }
}

綁定值的模式

匹配的分支可以綁定到被匹配對象的部分值,因此我們可以從enum變體中獲取值

fn main() {
    println!("penny {}", value_in_cents(Coin::Quarter(UsState::Alabama))) // State quarter from Alabama\n penny 25 
}
#[derive(Debug)]
enum UsState {
    Alabama,
    Alaska,
}
enum Coin {
    Penny,
    Nickel,
    Dime,
    Quarter(UsState),
}
fn value_in_cents(coin: Coin) -> u8 {
    match coin {
        Coin::Penny => 1,
        Coin::Nickel => 5,
        Coin::Dime => 10,
        // 綁定值的模式匹配
        Coin::Quarter(state) => {
            println!("State quarter from {:?}", state);
            25
        },
    }
}

在rust的match匹配中,必須要窮舉所有的變體

但是如果match要匹配的變體太多了,我們不想處理那么多該怎么辦呢?

  • 可以使用通配符_來替代其余沒列出的值
fn main() {
    let v = 0u8;
    match v {
        1 => println!("one"),
        2 => println!("two"),
        3 => println!("three"),
        // 其他的不想匹配了,可以使用`_`替代,下?lián)Q線通配符只能放到最后一行
        _ => println!("other")
    }
}

match語法糖【if let】

上述的例子可以使用if let控制流進行改寫

fn main() {
    let v = 0u8;
    match v {
        1 => println!("one"),
        2 => println!("two"),
        3 => println!("three"),
        // 其他的不想匹配了,可以使用`_`替代,下?lián)Q線通配符只能放到最后一行
        _ => println!("other"),
    }
    // 可以使用let進行簡寫
    if let 3 = v {
        println!("three");
    } else {
        println!("other")
    }
}

小結(jié)一下if let的作用

  • 處理只關(guān)心一種匹配二忽略其他匹配的情況
  • 更少的代碼、更少的縮進、更少的模板代碼
  • 放棄了窮舉的可能
  • 我們可以把if let當做是match的語法糖

匹配Option

fn main() {
    let five = Some(5);
    let six = plus_one(five);
    let none = plus_one(None);
    // 使用模式匹配和Option可以避免其他語言出現(xiàn)NPE的問題
    match six {
        Some(value) => println!("six: {}", value),
        None => println!("six: None"),
    }
    match none {
        Some(value) => println!("none: {}", value),
        None => println!("none: None"),
    }
}
fn plus_one(x: Option<i32>) -> Option<i32> {
    match x {
        None => None,
        Some(i) => Some(i + 1)
    }
}

到此這篇關(guān)于rust中的 match表達式的文章就介紹到這了,更多相關(guān)rust match表達式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Rust語言數(shù)據(jù)類型的具體使用

    Rust語言數(shù)據(jù)類型的具體使用

    在Rust中,每個值都有一個明確的數(shù)據(jù)類型,本文主要介紹了Rust語言數(shù)據(jù)類型的具體使用,具有一定的參考價值,感興趣的可以了解一下
    2024-04-04
  • Rust編寫自動化測試實例權(quán)威指南

    Rust編寫自動化測試實例權(quán)威指南

    這篇文章主要為大家介紹了Rust編寫自動化測試實例權(quán)威指南詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • Rust 連接 SQLite 數(shù)據(jù)庫的過程解析

    Rust 連接 SQLite 數(shù)據(jù)庫的過程解析

    本文通過一個例子給大家介紹了Rust 連接 SQLite 數(shù)據(jù)庫的詳細過程,我使用rusqlite這個crate,對Rust 連接 SQLite 數(shù)據(jù)庫相關(guān)知識感興趣的朋友跟隨小編一起看看吧
    2022-01-01
  • Rust 語言的全鏈路追蹤庫 tracing使用方法

    Rust 語言的全鏈路追蹤庫 tracing使用方法

    這篇文章主要介紹了Rust 語言的全鏈路追蹤庫 tracing,接下來就以 tracing 為例,介紹一下trace 的核心概念以及使用方法,需要的朋友可以參考下
    2022-12-12
  • 從零開始使用Rust編寫nginx(TLS證書快過期了)

    從零開始使用Rust編寫nginx(TLS證書快過期了)

    wmproxy已用Rust實現(xiàn)http/https代理,?socks5代理,?反向代理,?負載均衡,?靜態(tài)文件服務(wù)器,websocket代理,四層TCP/UDP轉(zhuǎn)發(fā),內(nèi)網(wǎng)穿透等,本文給大家介紹從零開始使用Rust編寫nginx(TLS證書快過期了),感興趣的朋友一起看看吧
    2024-03-03
  • Rust調(diào)用Windows API 如何獲取正在運行的全部進程信息

    Rust調(diào)用Windows API 如何獲取正在運行的全部進程信息

    本文介紹了如何使用Rust調(diào)用WindowsAPI獲取正在運行的全部進程信息,通過引入winapi依賴并添加相應(yīng)的features,可以實現(xiàn)對不同API集的調(diào)用,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • 詳解rust?自動化測試、迭代器與閉包、智能指針、無畏并發(fā)

    詳解rust?自動化測試、迭代器與閉包、智能指針、無畏并發(fā)

    這篇文章主要介紹了rust?自動化測試、迭代器與閉包、智能指針、無畏并發(fā),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-11-11
  • Rust cargo 命令行工具使用示例教程

    Rust cargo 命令行工具使用示例教程

    cargo 是 Rust 的構(gòu)建系統(tǒng)和包管理器,負責(zé)創(chuàng)建項目、編譯代碼、管理依賴、運行測試等,是日常開發(fā)中最常用的工具,這篇文章主要介紹了Rust cargo 命令行工具使用教程,需要的朋友可以參考下
    2025-04-04
  • 詳解Rust調(diào)用tree-sitter支持自定義語言解析

    詳解Rust調(diào)用tree-sitter支持自定義語言解析

    使用Rust語言結(jié)合tree-sitter庫解析自定義語言需要定義語法、生成C解析器,并在Rust項目中集成,具體步驟包括創(chuàng)建grammar.js定義語法,使用tree-sitter-cli工具生成C解析器,以及在Rust項目中編寫代碼調(diào)用解析器,這一過程涉及到對tree-sitter的深入理解和Rust語言的應(yīng)用技巧
    2024-09-09
  • rust閉包的使用

    rust閉包的使用

    閉包在Rust中是非常強大的功能,允許你編寫更靈活和表達性的代碼,本文主要介紹了rust閉包的使用,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12

最新評論