国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

30天拿下Rust之模式與模式匹配

這篇具有很好參考價值的文章主要介紹了30天拿下Rust之模式與模式匹配。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

概述

????????Rust語言以其強大的類型系統(tǒng)和所有權(quán)模型而著稱,而模式與模式匹配則是Rust中一種非常強大且靈活的工具,它允許我們在編譯時根據(jù)數(shù)據(jù)的結(jié)構(gòu)進行條件分支處理。在Rust中,模式是一種用于匹配數(shù)據(jù)的結(jié)構(gòu),它可以是一個具體的值、一個變量綁定、一個枚舉的變體、一個元組、一個結(jié)構(gòu)體或者一個組合模式。模式匹配則是根據(jù)數(shù)據(jù)的結(jié)構(gòu),將數(shù)據(jù)與模式進行匹配,并根據(jù)匹配的結(jié)果執(zhí)行相應(yīng)的代碼塊。

基本模式匹配

????????基礎(chǔ)模式匹配時,可以是常量模式,也可以是變量綁定模式。

????????在下面的示例代碼中,我們有一個常量number,其值為66。我們使用match表達式來檢查number的值。第一個模式66是一個常量模式,它直接匹配整數(shù)值66。如果number的值是66,則執(zhí)行對應(yīng)的代碼塊。如果number的值不是66,則執(zhí)行_通配符模式對應(yīng)的代碼塊。

????????接下來,有一個變量some_number,其類型為Option<i32>,并且它的值為Some(100)。我們使用match表達式來檢查some_number的值。第一個模式Some(x)是一個變量綁定模式,它匹配Option枚舉的Some變體,并將Some中的值綁定到變量x上。如果some_number的值是Some(100),則執(zhí)行對應(yīng)的代碼塊,并打印出"value is: 100"。注意:這里的x是一個新的綁定變量,它只在Some(x)這個模式對應(yīng)的代碼塊中有效。如果some_number的值是None,則執(zhí)行None模式對應(yīng)的代碼塊。

fn main() {
    // 常量模式
    let number = 66;
    match number {
        66 => println!("number is 66"),
        _ => println!("something else"),
    }

    // 變量綁定模式
    let some_number = Some(100);
    match some_number {
        // x在此處作為綁定變量
        Some(x) => println!("value is: {}", x),
        None => println!("no value"),
    }
}

結(jié)構(gòu)體和枚舉的模式匹配

????????當使用match表達式處理結(jié)構(gòu)體時,我們可以指定結(jié)構(gòu)體字段的值來進行匹配。

????????在下面的示例代碼中,match表達式中有兩個模式:

????????Point { x: 0, y: 0 }:這個模式試圖匹配一個Point結(jié)構(gòu)體,其中x字段的值為0,y字段的值為0。因為origin的值是Point { x: 66, y: 99 },這個模式不匹配。

????????Point { x, y }:這個模式是一個通配符模式,它會匹配任何Point結(jié)構(gòu)體,并將x和y字段的值綁定到對應(yīng)的變量上。因為第一個模式?jīng)]有匹配成功,所以執(zhí)行這個模式對應(yīng)的代碼塊。

????????在這個模式對應(yīng)的代碼塊中,x和y變量被綁定到了origin的x和y字段的值上,即:x為66,y為99。最后,我們使用println!宏打印出這些值。

struct Point {
    x: i32,
    y: i32,
}

fn main() {
    let origin = Point { x: 66, y: 99 };
    match origin {
        Point { x: 0, y: 0 } => println!("Origin point"),
        Point { x, y } => println!("({}, {})", x, y),
    }
}

????????當使用match表達式處理枚舉時,我們可以直接匹配特定的變體。

????????在下面的示例代碼中,match表達式中有三個模式:

????????Color::Red:匹配Color枚舉的Red變體。如果color是Red,將執(zhí)行此模式對應(yīng)的代碼塊,并打印"Color is red"。

????????Color::Green:匹配Color枚舉的Green變體。如果color是Green,將執(zhí)行此模式對應(yīng)的代碼塊,并打印"Color is green"。

????????Color::Blue(r, g, b):匹配Color枚舉的Blue變體,并解構(gòu)出其關(guān)聯(lián)的值,將RGB三個分量的值分別綁定到變量r、g和b上。如果color是Blue,將執(zhí)行此模式對應(yīng)的代碼塊,并使用println!宏打印出"Color is blue: (r, g, b)",其中r、g和b是具體的RGB值。

????????因為color被初始化為Color::Blue(0, 255, 0),所以match表達式將匹配Color::Blue(r, g, b)模式,并執(zhí)行相應(yīng)的代碼塊。

enum Color {
    Red,
    Green,
    Blue(u8, u8, u8),
}

fn main() {
    let color = Color::Blue(0, 255, 0);
    match color {
        Color::Red => println!("Color is red"),
        Color::Green => println!("Color is green"),
        Color::Blue(r, g, b) => println!("Color is blue: ({}, {}, {})", r, g, b),
    }
}

_通配符和..剩余模式

????????_作為通配符匹配任何值,而..則是剩余模式,用來捕獲列表、數(shù)組或結(jié)構(gòu)體中未顯式匹配的部分。

????????在下面的示例代碼中,match表達式中有兩個模式:

????????[first, second, ..]:這是一個解構(gòu)模式,用于匹配數(shù)組或切片。這個模式將數(shù)組的第一個元素綁定到變量first,第二個元素綁定到變量second,而..表示匹配并忽略剩余的所有元素。

????????_:這是一個通配符模式,用于匹配任何未被之前模式匹配的值。如果數(shù)組numbers與前面的模式不匹配,就會執(zhí)行這個模式對應(yīng)的代碼塊。

????????因為numbers數(shù)組至少有兩個元素,所以它會成功匹配[first, second, ..]模式。因此,first會被綁定到10,second會被綁定到20,然后執(zhí)行該模式對應(yīng)的代碼塊。如果numbers數(shù)組的元素少于兩個,那么[first, second, ..]模式就不會匹配,而是會執(zhí)行_模式對應(yīng)的代碼塊。

fn main() {
    let numbers = [10, 20, 30, 40, 50];
    match numbers {
        [first, second, ..] => println!("{}, {}", first, second),
        _ => println!("other conditions"),
    }
}

模式守衛(wèi)

????????除了以上的模式匹配,Rust還提供了模式守衛(wèi)等高級功能。模式守衛(wèi)允許我們在匹配模式時附加一個條件,只有當條件為真時,模式才匹配成功。模式守衛(wèi)寫在match分支的模式后面,使用if關(guān)鍵字開頭,后面跟著一個布爾表達式。

????????在下面的示例代碼中,我們匹配一個元組pair。對于每個模式,我們有一個條件表達式,它必須為true才能使相應(yīng)的分支被執(zhí)行。第一個分支檢查x和y是否都大于0,第二個分支檢查x是否大于0。如果兩個條件都不滿足,則執(zhí)行最后一個分支。

fn main() {
    let pair = (66, -99);
    match pair {
        (x, y) if x > 0 && y > 0 => println!("both are positive: {} and {}", x, y),
        (x, y) if x > 0 => println!("only x is positive: {}", x),
        _ => println!("neither is positive"),
    }
}

總結(jié)

????????Rust中的模式匹配功能強大且靈活,它極大地提高了代碼的表達力和可讀性,讓開發(fā)者能夠優(yōu)雅地處理各種復(fù)雜的數(shù)據(jù)結(jié)構(gòu)和條件分支。通過熟練掌握模式匹配,我們可以編寫出更為簡潔、高效和安全的Rust代碼。文章來源地址http://www.zghlxwxcb.cn/news/detail-849038.html

到了這里,關(guān)于30天拿下Rust之模式與模式匹配的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 30天拿下Rust之錯誤處理

    30天拿下Rust之錯誤處理

    概述 ????????在軟件開發(fā)領(lǐng)域,對錯誤的妥善處理是保證程序穩(wěn)定性和健壯性的重要環(huán)節(jié)。Rust作為一種系統(tǒng)級編程語言,以其對內(nèi)存安全和所有權(quán)的獨特設(shè)計而著稱,其錯誤處理機制同樣體現(xiàn)了Rust的嚴謹與實用。在Rust中,錯誤處理通常分為兩大類:不可恢復(fù)的錯誤和可

    2024年03月21日
    瀏覽(19)
  • 30天拿下Rust之Trait

    概述 ????????在Rust中,Trait是一個核心概念,它允許我們定義類型應(yīng)該具有的行為。Trait類似于其他語言中的接口,但Rust的Trait更為強大和靈活。它不僅定義了一組方法,還允許我們指定方法的默認實現(xiàn)、泛型約束和繼承。通過Trait,我們可以定義一組方法的簽名和關(guān)聯(lián)類

    2024年03月17日
    瀏覽(23)
  • 30天拿下Rust之HashMap

    概述 ????????HashMap,被稱為哈希表或散列表,是一種可以存儲鍵值對的數(shù)據(jù)結(jié)構(gòu)。它使用哈希函數(shù)將鍵映射到存儲位置,以便可以快速檢索和更新元素。這種數(shù)據(jù)結(jié)構(gòu)在許多編程語言中都存在,而在Rust中,它被實現(xiàn)為HashMapK, V。其中,K表示鍵的類型,V表示值的類型。H

    2024年03月17日
    瀏覽(19)
  • 30天拿下Rust之圖形編程

    30天拿下Rust之圖形編程

    概述 ????????Rust語言以其卓越的安全性、性能和可靠性贏得了廣大開發(fā)者的青睞,逐漸在系統(tǒng)編程、網(wǎng)絡(luò)服務(wù)、游戲開發(fā)等領(lǐng)域嶄露頭角。隨著Rust生態(tài)的日益繁榮,圖形編程領(lǐng)域也涌現(xiàn)出一批優(yōu)秀的框架和庫,使得用Rust進行高效、安全的圖形應(yīng)用開發(fā)成為可能。 圖形庫

    2024年04月17日
    瀏覽(20)
  • 30天拿下Rust之高級類型

    概述 ????????Rust作為一門系統(tǒng)編程語言,以其獨特的內(nèi)存管理方式和強大的類型系統(tǒng)著稱。其中,高級類型的應(yīng)用,為Rust的開發(fā)者提供了豐富的編程工具和手段,使得開發(fā)者可以更加靈活和高效地進行編程。 Newtype模式 ????????Newtype模式是一種輕量級的設(shè)計模式,用

    2024年04月15日
    瀏覽(62)
  • 30天拿下Rust之輸入輸出

    概述 ????????在軟件開發(fā)中,輸入輸出(I/O)是任何應(yīng)用程序的基本構(gòu)建模塊。Rust作為一門注重安全和性能的語言,在其標準庫中提供了強大的I/O功能。這些功能使得Rust程序員能夠非常輕松地進行標準I/O、文件讀寫等操作。 標準I/O ????????在Rust中,標準輸入通常通

    2024年03月24日
    瀏覽(21)
  • 30天拿下Rust之網(wǎng)絡(luò)編程

    概述 ????????在現(xiàn)代軟件開發(fā)中,網(wǎng)絡(luò)編程無處不在。無論是構(gòu)建高性能的服務(wù)器、實時通信應(yīng)用,還是實現(xiàn)復(fù)雜的分布式系統(tǒng),對網(wǎng)絡(luò)編程技術(shù)的掌握都至關(guān)重要。Rust語言以其卓越的安全性、高性能和優(yōu)秀的并發(fā)模型,為網(wǎng)絡(luò)編程提供了堅實的基礎(chǔ)。 std::net ??????

    2024年04月14日
    瀏覽(25)
  • 30天拿下Rust之字符串

    概述 ????????在Rust中,字符串是一種非常重要的數(shù)據(jù)類型,用于處理文本數(shù)據(jù)。Rust的字符串是以UTF-8編碼的字節(jié)序列,主要有兩種類型:str和String。其中,str是一個對字符數(shù)據(jù)的不可變引用,更像是對現(xiàn)有字符串數(shù)據(jù)的“視圖”,而String則是一個獨立、可變更的字符串實

    2024年03月12日
    瀏覽(16)
  • 30天拿下Rust之命令行參數(shù)

    概述 ????????在Rust中,命令行參數(shù)是程序從命令行接收的輸入,它們?yōu)槌绦蛱峁┝诉\行時配置和數(shù)據(jù)的靈活性。對于需要用戶交互或自動化腳本的Rust程序來說,正確地解析命令行參數(shù)至關(guān)重要。通過std::env::args和第三方庫(比如:clap),我們可以輕松地獲取和解析命令行

    2024年03月26日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包