女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Rust的 match 語句用法

科技綠洲 ? 來源:TinyZ ? 作者:TinyZ ? 2023-09-19 17:08 ? 次閱讀

Rust 是一門現代化的系統編程語言,它擁有高性能、內存安全和并發性等特點。Rust 的語法設計非常優秀,其中 match 語句是一種非常強大的語言特性。match 語句可以讓我們根據不同的匹配模式執行不同的代碼,這在處理復雜的邏輯時非常有用。在本教程中,我們將深入了解 Rust 的 match 語句,包括基礎用法、進階用法和實踐經驗等方面。

基礎用法

match 語句是 Rust 中的一種控制流語句,它可以讓我們根據不同的模式匹配執行不同的代碼。match 語句的基本語法如下:

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

其中,value 是要匹配的變量,pattern 是匹配模式,=>后面是要執行的代碼塊。如果 value 匹配了某個模式,就會執行對應的代碼塊。如果 value 沒有匹配任何模式,就會執行默認的代碼塊(即_ => {...})。

接下來,我們將通過一些示例來介紹 match 語句的基礎用法。

匹配整數

let x = 1;

match x {
    1 = > println!("x is one"),
    2 = > println!("x is two"),
    _ = > println!("x is not one or two"),
}

在這個示例中,我們定義了一個整數變量 x,并使用 match 語句匹配它。如果 x 等于 1,就會執行第一個代碼塊,輸出"x is one";如果 x 等于 2,就會執行第二個代碼塊,輸出"x is two";如果 x 不等于 1 或 2,就會執行默認的代碼塊,輸出"x is not one or two"。

匹配枚舉類型

enum Color {
    Red,
    Green,
    Blue,
}

let color = Color::Green;

match color {
    Color::Red = > println!("The color is red"),
    Color::Green = > println!("The color is green"),
    Color::Blue = > println!("The color is blue"),
}

在這個示例中,我們定義了一個枚舉類型 Color,并將變量 color 賦值為 Color::Green。然后,我們使用 match 語句匹配 color。如果 color 等于 Color::Red,就會執行第一個代碼塊,輸出"The color is red";如果 color 等于 Color::Green,就會執行第二個代碼塊,輸出"The color is green";如果 color 等于 Color::Blue,就會執行第三個代碼塊,輸出"The color is blue"。

匹配元組

let point = (1, 2);

match point {
    (0, 0) = > println!("The point is at the origin"),
    (_, 0) = > println!("The point is on the x-axis"),
    (0, _) = > println!("The point is on the y-axis"),
    (x, y) = > println!("The point is at ({}, {})", x, y),
}

在這個示例中,我們定義了一個元組變量 point,并使用 match 語句匹配它。如果 point 等于(0, 0),就會執行第一個代碼塊,輸出"The point is at the origin";如果 point 的第二個元素等于 0,就會執行第二個代碼塊,輸出"The point is on the x-axis";如果 point 的第一個元素等于 0,就會執行第三個代碼塊,輸出"The point is on the y-axis";否則,就會執行第四個代碼塊,輸出"The point is at ({}, {})"。

匹配范圍

let age = 20;

match age {
    0..=17 = > println!("You are a minor"),
    18..=64 = > println!("You are an adult"),
    _ = > println!("You are a senior"),
}

在這個示例中,我們定義了一個整數變量 age,并使用 match 語句匹配它。如果 age 的值在 0 到 17 之間,就會執行第一個代碼塊,輸出"You are a minor";如果 age 的值在 18 到 64 之間,就會執行第二個代碼塊,輸出"You are an adult";否則,就會執行默認的代碼塊,輸出"You are a senior"。

匹配引用

let x = 1;
let y = &x;

match y {
    &1 = > println!("The value is one"),
    _ = > println!("The value is not one"),
}

在這個示例中,我們定義了一個整數變量 x 和一個指向 x 的引用 y。然后,我們使用 match 語句匹配 y。由于 y 是一個引用,所以我們需要在模式中使用&符號來匹配它。如果 y 指向的值等于 1,就會執行第一個代碼塊,輸出"The value is one";否則,就會執行默認的代碼塊,輸出"The value is not one"。

匹配守衛

let x = 5;

match x {
    n if n < 0 = > println!("The value is negative"),
    n if n > 10 = > println!("The value is greater than 10"),
    _ = > println!("The value is between 0 and 10"),
}

在這個示例中,我們定義了一個整數變量 x,并使用 match 語句匹配它。在模式中,我們使用 if 語句添加了一個守衛條件。如果 x 小于 0,就會執行第一個代碼塊,輸出"The value is negative";如果 x 大于 10,就會執行第二個代碼塊,輸出"The value is greater than 10";否則,就會執行默認的代碼塊,輸出"The value is between 0 and 10"。

進階用法

除了上面介紹的基礎用法,match 語句還有一些進階用法,可以讓我們更加靈活地使用它。接下來,我們將介紹 match 語句的一些進階用法,并通過示例來演示它們的用法。

使用|匹配多個模式

let x = 1;

match x {
    1 | 2 = > println!("The value is one or two"),
    _ = > println!("The value is not one or two"),
}

在這個示例中,我們定義了一個整數變量 x,并使用 match 語句匹配它。在模式中,我們使用|符號來匹配多個模式。如果 x 等于 1 或 2,就會執行第一個代碼塊,輸出"The value is one or two";否則,就會執行默認的代碼塊,輸出"The value is not one or two"。

使用..=匹配范圍

let age = 20;

match age {
    0..=17 = > println!("You are a minor"),
    18..=64 = > println!("You are an adult"),
    _ = > println!("You are a senior"),
}

在這個示例中,我們定義了一個整數變量 age,并使用 match 語句匹配它。在模式中,我們使用..=符號來匹配范圍。如果 age 的值在 0 到 17 之間,就會執行第一個代碼塊,輸出"You are a minor";如果 age 的值在 18 到 64 之間,就會執行第二個代碼塊,輸出"You are an adult";否則,就會執行默認的代碼塊,輸出"You are a senior"。

使用@綁定變量

let x = Some(5);

match x {
    Some(n @ 1..=10) = > println!("The value is between 1 and 10: {}", n),
    Some(n @ 11..=20) = > println!("The value is between 11 and 20: {}", n),
    Some(_) = > println!("The value is not between 1 and 20"),
    None = > (),
}

在這個示例中,我們定義了一個 Option 類型的變量 x,并使用 match 語句匹配它。在模式中,我們使用@符號來綁定一個變量。如果 x 是一個 Some 類型,并且它的值在 1 到 10 之間,就會執行第一個代碼塊,輸出"The value is between 1 and 10";如果 x 是一個 Some 類型,并且它的值在 11 到 20 之間,就會執行第二個代碼塊,輸出"The value is between 11 and 20";如果 x 是一個 Some 類型,但它的值不在 1 到 20 之間,就會執行第三個代碼塊,輸出"The value is not between 1 and 20";如果 x 是一個 None 類型,就不會執行任何代碼。

使用_忽略模式

let x = Some(5);

match x {
    Some(_) = > println!("The value is some"),
    None = > println!("The value is none"),
}

在這個示例中,我們定義了一個 Option 類型的變量 x,并使用 match 語句匹配它。在模式中,我們使用_符號來忽略模式。如果 x 是一個 Some 類型,就會執行第一個代碼塊,輸出"The value is some";如果 x 是一個 None 類型,就會執行第二個代碼塊,輸出"The value is none"。

使用 if let 簡化模式匹配

let x = Some(5);

if let Some(n) = x {
    println!("The value is {}", n);
} else {
    println!("The value is None");
}

在這個示例中,我們定義了一個 Option 類型的變量 x,并使用 if let 語句匹配它。如果 x 是一個 Some 類型,就會執行 if 語句塊,輸出"The value is x";如果 x 是一個 None 類型,就會執行 else 語句塊,輸出"The value is None"。使用 if let 語句可以簡化模式匹配的代碼,使代碼更加清晰和簡潔。

使用 while let 遍歷迭代器

let mut v = vec![1, 2, 3];
while let Some(n) = v.pop() {
    println!("{}", n);
}

在這個示例中,我們定義了一個整數數組 v,并使用 while let 語句遍歷它的元素。在 while let 語句中,我們使用 pop()方法從數組中依次取出元素,并將它們綁定到變量 n 中。如果數組中還有元素,就會執行 while 語句塊,輸出元素的值;否則,就會退出 while 循環。使用 while let 語句可以方便地遍歷迭代器或者其他可迭代對象。

實踐經驗

在實際開發中,我們經常需要使用 match 語句來處理復雜的邏輯。以下是一些實踐經驗,可以幫助我們更好地使用 match 語句。

給每個分支加上花括號

在 match 語句中,每個分支的代碼塊通常都比較復雜,因此我們應該給每個分支加上花括號,以便更好地閱讀和維護代碼。例如:

let x = 1;

match x {
    1 = > {
        println!("The value is one");
        println!("This is a long message");
    }
    2 = > {
        println!("The value is two");
    }
    _ = > {
        println!("The value is not one or two");
    }
}

使用_忽略不需要的變量

在 match 語句中,我們可以使用_符號來忽略不需要的變量。這樣可以簡化代碼,并且讓代碼更加清晰。例如:

let x = (1, 2);

match x {
    (1, _) = > println!("The first element is 1"),
    (_, 2) = > println!("The second element is 2"),
    _ = > (),
}

在這個示例中,我們使用_符號來忽略第二個元素,因為我們只關心第一個元素是否等于 1。

使用 if let 簡化模式匹配

在某些情況下,我們只需要匹配一個模式,而不需要處理其他模式。此時,我們可以使用 if let 語句來簡化模式匹配的代碼。例如:

let x = Some(5);

if let Some(n) = x {
    println!("The value is {}", n);
}

在這個示例中,我們只需要匹配 Some 類型的值,而不需要處理 None 類型的值。因此,使用 if let 語句可以讓代碼更加簡潔和清晰。

使用 while let 遍歷迭代器

在遍歷迭代器時,我們可以使用 while let 語句來依次取出元素,并進行處理。例如:

fn main() {
    let v = vec![1, 2, 3];

    for n in &v {
        println!("{}", n);
    }

    let mut v = vec![1, 2, 3];
    while let Some(n) = v.pop() {
        println!("{}", n);
    }
}

在這個示例中,我們使用 for 循環和 while let 語句來遍歷整數數組 v 的元素。使用 while let 語句可以讓代碼更加簡潔和清晰。

總結

match 語句是 Rust 中非常強大的語言特性,它可以讓我們根據不同的匹配模式執行不同的代碼。在本教程中,我們介紹了 match 語句的基礎用法、進階用法和實踐經驗等方面。通過學習本教程,相信讀者已經掌握了 match 語句的基本用法,并能夠在實際開發中靈活運用它。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 編程語言
    +關注

    關注

    10

    文章

    1955

    瀏覽量

    36081
  • 代碼
    +關注

    關注

    30

    文章

    4886

    瀏覽量

    70249
  • 變量
    +關注

    關注

    0

    文章

    614

    瀏覽量

    28821
  • Rust
    +關注

    關注

    1

    文章

    233

    瀏覽量

    6955
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    SQLx的基礎用法和進階用法

    SQLx是一個Rust語言的異步SQL數據庫訪問庫,支持多種數據庫,包括PostgreSQL、MySQL、SQLite等。本教程將以SQLite為例,介紹SQLx的基礎用法和進階用法。 基礎
    的頭像 發表于 09-19 14:29 ?2814次閱讀

    SQLx在Rust語言中的基礎用法和進階用法

    SQLx是一個Rust語言的異步SQL執行庫,它支持多種數據庫,包括MySQL、PostgreSQL、SQLite等。本教程將以MySQL數據庫為例,介紹SQLx在Rust語言中的基礎用法和進階
    的頭像 發表于 09-19 14:32 ?5972次閱讀

    SeaORM的基礎用法

    可讀性。 在本教程中,我們將介紹SeaORM的基本用法和進階用法。我們將使用SQLite數據庫來演示這些用法。 基礎用法 在使用SeaORM之前,我們需要將其添加到我們的
    的頭像 發表于 09-19 14:37 ?2963次閱讀

    基于Rust語言Hash特征的基礎用法和進階用法

    ,包括Hash trait、HashMap、HashSet等,本教程將詳細介紹Rust語言Hash特征的基礎用法和進階用法。 基礎用法 使用Hash trait 在
    的頭像 發表于 09-19 16:02 ?1735次閱讀

    如何使用Rust連接Redis

    Redis是一款快速、開源、鍵值存儲數據庫,被廣泛應用于緩存、發布/訂閱系統、定時任務等場景中。Rust提供了很多Redis的客戶端庫,本教程將會介紹如何使用Rust連接Redis,以及如何通過
    的頭像 發表于 09-19 16:22 ?2816次閱讀

    Rust語言如何與 InfluxDB 集成

    的數據處理和存儲能力。 本教程將介紹 Rust 語言如何與 InfluxDB 集成,包括基礎用法和進階用法和完整的示例代碼。 基礎用法 安裝 InfluxDB
    的頭像 發表于 09-30 16:45 ?1403次閱讀

    如何在Rust中讀寫文件

    見的內存安全問題和數據競爭問題。 在Rust中,讀寫文件是一項非常常見的任務。本教程將介紹如何在Rust中讀寫文件,包括基礎用法和進階用法。 基礎
    的頭像 發表于 09-20 10:57 ?2377次閱讀

    求助if 語句用法

    查了 if 相關嵌套的用法 好像沒有下面這樣用的語句
    發表于 08-19 15:49

    verilog中generate語句用法分享

    不同的賦值語句或者邏輯語句,如果在參數量很大的的情況下,原本的列舉就會顯得心有余而力不足。c語言中常用for語句來解決此類問題,verilog則為我們提供了generate語句。一 、
    發表于 12-23 16:59

    淺談C語言goto語句用法

    今天一起來分析C語言,goto語句用法。goto語句用法goto語句,為無條件轉移語句。其一
    發表于 05-06 09:16

    generate語句的基本概念與用法

    生成語句(GENERATE)是一種可以建立重復結構或者是在多個模塊的表示形式之間進行選擇的語句。由于生成語句可以用來產生多個相同的結構,因此使用生成語句就可以避免多段相同結構的VHDL
    的頭像 發表于 11-21 07:08 ?6286次閱讀

    SQL的經典語句用法詳細說明

    本文檔的主要內容詳細介紹的是SQL的經典語句用法詳細說明資料免費下載
    發表于 10-22 16:11 ?5次下載

    verilog中的initial語句說明

    解釋verilog HDL中的initial語句用法
    發表于 05-31 09:11 ?0次下載

    MySQL的match函數在sp中使用的BUG解析

    在一次開發中在sp中使用MySQL PREPARE以后,使用match AGAINST語句作為prepare stmt的參數后,發現執行第二遍call會導致數據庫crash,于是開始動手調查問題發生的原因。
    的頭像 發表于 07-06 09:33 ?674次閱讀
    MySQL的<b class='flag-5'>match</b>函數在sp中使用的BUG解析

    assign語句和always語句用法

    用法和功能。 一、Assign語句 Assign語句的定義和語法 Assign語句用于在HDL中連續賦值,它允許在設計中為信號或變量分配一個值。Assign
    的頭像 發表于 02-22 16:24 ?3669次閱讀