亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Rust控制流運(yùn)算符match的用法詳解

 更新時間:2024年01月28日 10:40:46   作者:qq5551230  
match 是Rust中一個極為強(qiáng)大的控制流運(yùn)算符,用于模式匹配和控制流的選擇,它允許將一個值與一系列的模式相比較,根據(jù)匹配的模式執(zhí)行相應(yīng)代碼,本文給大家詳細(xì)介紹了Rust控制流運(yùn)算符match的用法,需要的朋友可以參考下

概述

match 是Rust中一個極為強(qiáng)大的控制流運(yùn)算符,用于模式匹配和控制流的選擇。它允許將一個值與一系列的模式相比較,根據(jù)匹配的模式執(zhí)行相應(yīng)代碼。模式可由字面量、變量、通配符和許多其他內(nèi)容構(gòu)成。

模式由以下元素(的一些組合)組成:

  • 字面量
  • 解構(gòu)的數(shù)組
  • 枚舉類型
  • 結(jié)構(gòu)體
  • 處理?xiàng)l件表達(dá)式
  • 通配符
  • 占位符

我們可以把match表達(dá)式想象成某種硬幣分類器:硬幣滑入有著不同大小孔洞的軌道,每個硬幣都會掉入符合它大小的空洞。同樣地,值也會通過match的每一個模式,并且在遇到第一個“符合”的模式時,值會進(jìn)入相關(guān)的代碼塊并在執(zhí)行中被使用。

基礎(chǔ)語法

match value {
    pattern1 => {
        //code1
    }
    pattern2 => {
        //code2
    }
    _ => {
        //沒有任何匹配
    }
}

基礎(chǔ)語法中,value是要匹配的變量,pattern是匹配模式, => 后面是要執(zhí)行的代碼。末尾使用通配符“ - ”(下劃線)表示其他情況。如果value匹配了某個模式,就執(zhí)行相應(yīng)代碼塊,如果value沒有匹配任何模式,就會執(zhí)行默認(rèn)的代碼塊,即( _ => {...},)。

讓我們編寫一個函數(shù)來獲取一個未知的硬幣,并以一種類似驗(yàn)鈔機(jī)的方式,確定它時何種硬幣并返回它的美分值。

//一個枚舉和一個以枚舉成員作為模式的match表達(dá)式
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 => 25,
    }
}

如果分支代碼較短的話通常不使用大括號,如果想要在分支中運(yùn)行多行代碼,可以使用大括號。

fn value_in_cents(coin:Coin) -> u8 {
    match coin {
        Coin::Penny => {
            println!("Lucy penny!");
            1
        }
        Coin::Nickel => 5,
        Coin::Dime => 10,
        Coin::Quarter =>25,
    }
}

綁定值的模式

匹配分支的另一個有用的功能是可以綁定匹配的模式的部分值。也就是可以從枚舉成員中提取值的方式。

舉個例子,讓我們修改枚舉中的一個成員來存放數(shù)據(jù)。1999年到2008年間,美國在25美分的硬幣的一側(cè)為50個州的每一個都印刷了不同的設(shè)計。其他的硬幣都沒有這種區(qū)分州的設(shè)計,只有這些25美分的硬幣有特殊的價值。可以將這些信息加入我們的enum,通過改變Quarter成員來包含一個State值。

//Quarter成員也存放一個UsState值的Coin枚舉
#[derive(Debug)]
enum UsState {
    Alabama,
    Alaska,
    //--snip--
}
 
enum Coin {
    Penny,
    Nickel,
    Dime,
    Quarter(UsState),
}

假設(shè)我們的一個朋友正在嘗試收集所有50個州25美分硬幣。根據(jù)硬幣類型分類零錢的同時,也可以報告出每個25美分硬幣所對應(yīng)的州名稱,如果他沒有的話,他可以將其加入收藏。

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
        }
    }
}

調(diào)用value_in_cents(Coin::Quarter(UsState::Alaska),coin將是Coin::Quarter(UsState::Alaska)。這時state綁定的值是UsState::Alaska。然后在pintln!表達(dá)式中使用這個綁定就可以獲取Coin枚舉的Quarter成員中內(nèi)部的州的值。

匹配Option<T>

我們想要編寫一個函數(shù),它獲取一個Option<i32>,如果其中含有一個值,將其加一。如果其中沒有值,函數(shù)應(yīng)該返回None值,二不嘗試執(zhí)行任何操作。

// 一個Option<i32>上使用match表達(dá)式的函數(shù)
fn plus_one (x: Option<i32>) -> Option<i32> {
    match x {
        None => None,
        Some(i) => Some(i+1),
    }
}
 
let five = Some(5);
let six =plus_one(five);
let none = plus_one(None);

匹配Some(T)

匹配是窮盡的

Rust知道我們沒有覆蓋所有可能的情況甚至指導(dǎo)哪些模式被忘記了!Rust中的匹配時窮盡的:必須窮舉到最后的可能性來使代碼有效。特別是在Option<T>的例子中,Rust防止我們忘記明確的處理None的情況,這讓我們免于假設(shè)擁有一個實(shí)際上為空的值,從而錯誤不可能發(fā)生。

通配符和 _ 占位符

假設(shè)我們正在玩一個游戲,如果你擲出骰子的值為3,角色不會移動,而是會得到一頂新奇的帽子。如果擲出骰子的值為7,你的角色將失去新奇的帽子。對于其他的數(shù)值,你的角色會在棋盤上移動相應(yīng)的格子。

let dice_roll = 9;
match dice_roll {
    3 => add_fancy_hat(),
    7 => remove_fancy_hat(),
    other => move_player(other),
}
 
fn add_fancy_hat() {}
fn remove_fancy_hat() {}
fn move_player(num_spaces: u8) {}

這是一個實(shí)現(xiàn)上述邏輯的match,匹配模式是字面值3和7,最后一個分支則涵蓋了所有其他可能的值,模式是我們命名為other的一個變量。other分支的代碼通過將其傳遞給move_player函數(shù)來使用這個變量。

最后一個模式?jīng)]有列出u8所有可能的值,代碼依舊能夠編譯。這種通配模式滿足了match必須被窮盡的要求,必須將通配分支放在最后,因?yàn)槟J绞前错樞蚱ヅ涞摹?/p>

當(dāng)我們不想使用通配模式獲取的值時,可以使用 _ 模式。這個模式可以匹配任意值而不綁定到該值。

改變游戲規(guī)則:現(xiàn)在,當(dāng)你擲出覺得值不是3或7的時候,你必須再次擲出。這種情況下我們不需要使用這個值。我們修改代碼使用"_"代替變量other:

let dice_roll = 9;
match dice_roll {
    3 => add_fancy_hat(),
    7 => remove_fancy_hat(),
    _ => reroll(),
}
 
fn add_fancy_hat() {}
fn remove_fancy_hat() {}
fn reroll() {}

最后一個分支中明確忽略了其他的值,也滿足了窮舉性要求。

改變游戲規(guī)則:如果擲出3或7以外的值,你的回合將無事發(fā)生。使用單元值(空元組)作為_分支的代碼:

let dice_roll = 9;
match dice_roll {
    3 => add_fancy_hat(),
    7 => remove_fancy_hat(),
    _ => (),
}
 
fn add_fancy_hat() {}
fn remove_fancy_hat() {}

到此這篇關(guān)于Rust控制流運(yùn)算符match的用法詳解的文章就介紹到這了,更多相關(guān)Rust控制流運(yùn)算符match內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • RUST異步流處理方法詳細(xì)講解

    RUST異步流處理方法詳細(xì)講解

    這篇文章主要介紹了RUST異步流處理方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-12-12
  • rust中間件actix_web在項(xiàng)目中的使用實(shí)戰(zhàn)

    rust中間件actix_web在項(xiàng)目中的使用實(shí)戰(zhàn)

    這篇文章主要介紹了rust中間件在項(xiàng)目中的使用實(shí)戰(zhàn),包括自定義中間件,日志中間件,Default?headers,用戶會話,錯誤處理的用法實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Rust?Postgres實(shí)例代碼

    Rust?Postgres實(shí)例代碼

    Rust Postgres是一個純Rust實(shí)現(xiàn)的PostgreSQL客戶端庫,本文主要介紹了Rust?Postgres實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • 詳解在Rust語言中如何聲明可變的static類型變量

    詳解在Rust語言中如何聲明可變的static類型變量

    在Rust中,可以使用lazy_static宏來聲明可變的靜態(tài)變量,lazy_static是一個用于聲明延遲求值靜態(tài)變量的宏,本文將通過一個簡單的例子,演示如何使用?lazy_static?宏來聲明一個可變的靜態(tài)變量,需要的朋友可以參考下
    2023-08-08
  • Rust編寫自動化測試實(shí)例權(quán)威指南

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

    這篇文章主要為大家介紹了Rust編寫自動化測試實(shí)例權(quán)威指南詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Windows系統(tǒng)下安裝Rust環(huán)境超詳細(xì)教程

    Windows系統(tǒng)下安裝Rust環(huán)境超詳細(xì)教程

    這篇文章主要介紹了如何在Windows系統(tǒng)上安裝mingw64和Rust,mingw64是一個輕便的C語言編譯環(huán)境,可以替代Rust默認(rèn)使用的Visual?Studio,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2025-02-02
  • 深入理解 Rust 中的模式匹配語法(最新推薦)

    深入理解 Rust 中的模式匹配語法(最新推薦)

    Rust中的模式匹配提供了多種方式來處理不同的數(shù)據(jù)類型和場景,本文給大家介紹Rust 中的模式匹配語法,感興趣的朋友一起看看吧
    2025-03-03
  • 如何基于Rust實(shí)現(xiàn)文本搜索minigrep

    如何基于Rust實(shí)現(xiàn)文本搜索minigrep

    這篇文章主要介紹了基于Rust實(shí)現(xiàn)的文本搜索minigrep,本次演示介紹針對原作者代碼程序的查詢邏輯做了一點(diǎn)點(diǎn)小的優(yōu)化,原程序邏輯的查詢是放在了程序運(yùn)行的時候,邏輯修改后啟動的時候可以添加參數(shù),也可以啟動后添加,需要的朋友可以參考下
    2024-08-08
  • Rust重載運(yùn)算符之復(fù)數(shù)四則運(yùn)算的實(shí)現(xiàn)

    Rust重載運(yùn)算符之復(fù)數(shù)四則運(yùn)算的實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了Rust如何實(shí)現(xiàn)復(fù)數(shù)以及復(fù)數(shù)的四則運(yùn)算,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-08-08
  • rust聲明式宏的實(shí)現(xiàn)

    rust聲明式宏的實(shí)現(xiàn)

    聲明式宏使得你能夠?qū)懗鲱愃?match?表達(dá)式的東西,來操作你所提供的?Rust代碼,它使用你提供的代碼來生成用于替換宏調(diào)用的代碼,感興趣的可以了解一下
    2023-12-12

最新評論