RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Rust的 match 語句用法

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

Rust 是一門現(xiàn)代化的系統(tǒng)編程語言,它擁有高性能、內(nèi)存安全和并發(fā)性等特點(diǎn)。Rust 的語法設(shè)計非常優(yōu)秀,其中 match 語句是一種非常強(qiáng)大的語言特性。match 語句可以讓我們根據(jù)不同的匹配模式執(zhí)行不同的代碼,這在處理復(fù)雜的邏輯時非常有用。在本教程中,我們將深入了解 Rust 的 match 語句,包括基礎(chǔ)用法、進(jìn)階用法和實(shí)踐經(jīng)驗(yàn)等方面。

基礎(chǔ)用法

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

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

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

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

匹配整數(shù)

let x = 1;

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

在這個示例中,我們定義了一個整數(shù)變量 x,并使用 match 語句匹配它。如果 x 等于 1,就會執(zhí)行第一個代碼塊,輸出"x is one";如果 x 等于 2,就會執(zhí)行第二個代碼塊,輸出"x is two";如果 x 不等于 1 或 2,就會執(zhí)行默認(rèn)的代碼塊,輸出"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,就會執(zhí)行第一個代碼塊,輸出"The color is red";如果 color 等于 Color::Green,就會執(zhí)行第二個代碼塊,輸出"The color is green";如果 color 等于 Color::Blue,就會執(zhí)行第三個代碼塊,輸出"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),就會執(zhí)行第一個代碼塊,輸出"The point is at the origin";如果 point 的第二個元素等于 0,就會執(zhí)行第二個代碼塊,輸出"The point is on the x-axis";如果 point 的第一個元素等于 0,就會執(zhí)行第三個代碼塊,輸出"The point is on the y-axis";否則,就會執(zhí)行第四個代碼塊,輸出"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"),
}

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

匹配引用

let x = 1;
let y = &x;

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

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

匹配守衛(wèi)

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"),
}

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

進(jìn)階用法

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

使用|匹配多個模式

let x = 1;

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

在這個示例中,我們定義了一個整數(shù)變量 x,并使用 match 語句匹配它。在模式中,我們使用|符號來匹配多個模式。如果 x 等于 1 或 2,就會執(zhí)行第一個代碼塊,輸出"The value is one or two";否則,就會執(zhí)行默認(rèn)的代碼塊,輸出"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"),
}

在這個示例中,我們定義了一個整數(shù)變量 age,并使用 match 語句匹配它。在模式中,我們使用..=符號來匹配范圍。如果 age 的值在 0 到 17 之間,就會執(zhí)行第一個代碼塊,輸出"You are a minor";如果 age 的值在 18 到 64 之間,就會執(zhí)行第二個代碼塊,輸出"You are an adult";否則,就會執(zhí)行默認(rèn)的代碼塊,輸出"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 之間,就會執(zhí)行第一個代碼塊,輸出"The value is between 1 and 10";如果 x 是一個 Some 類型,并且它的值在 11 到 20 之間,就會執(zhí)行第二個代碼塊,輸出"The value is between 11 and 20";如果 x 是一個 Some 類型,但它的值不在 1 到 20 之間,就會執(zhí)行第三個代碼塊,輸出"The value is not between 1 and 20";如果 x 是一個 None 類型,就不會執(zhí)行任何代碼。

使用_忽略模式

let x = Some(5);

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

在這個示例中,我們定義了一個 Option 類型的變量 x,并使用 match 語句匹配它。在模式中,我們使用_符號來忽略模式。如果 x 是一個 Some 類型,就會執(zhí)行第一個代碼塊,輸出"The value is some";如果 x 是一個 None 類型,就會執(zhí)行第二個代碼塊,輸出"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 類型,就會執(zhí)行 if 語句塊,輸出"The value is x";如果 x 是一個 None 類型,就會執(zhí)行 else 語句塊,輸出"The value is None"。使用 if let 語句可以簡化模式匹配的代碼,使代碼更加清晰和簡潔。

使用 while let 遍歷迭代器

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

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

實(shí)踐經(jīng)驗(yàn)

在實(shí)際開發(fā)中,我們經(jīng)常需要使用 match 語句來處理復(fù)雜的邏輯。以下是一些實(shí)踐經(jīng)驗(yàn),可以幫助我們更好地使用 match 語句。

給每個分支加上花括號

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

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"),
    _ = > (),
}

在這個示例中,我們使用_符號來忽略第二個元素,因?yàn)槲覀冎魂P(guān)心第一個元素是否等于 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 語句來依次取出元素,并進(jìn)行處理。例如:

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 循環(huán)和 while let 語句來遍歷整數(shù)數(shù)組 v 的元素。使用 while let 語句可以讓代碼更加簡潔和清晰。

總結(jié)

match 語句是 Rust 中非常強(qiáng)大的語言特性,它可以讓我們根據(jù)不同的匹配模式執(zhí)行不同的代碼。在本教程中,我們介紹了 match 語句的基礎(chǔ)用法、進(jìn)階用法和實(shí)踐經(jīng)驗(yàn)等方面。通過學(xué)習(xí)本教程,相信讀者已經(jīng)掌握了 match 語句的基本用法,并能夠在實(shí)際開發(fā)中靈活運(yùn)用它。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 編程語言
    +關(guān)注

    關(guān)注

    10

    文章

    1942

    瀏覽量

    34706
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4779

    瀏覽量

    68519
  • 變量
    +關(guān)注

    關(guān)注

    0

    文章

    613

    瀏覽量

    28360
  • Rust
    +關(guān)注

    關(guān)注

    1

    文章

    228

    瀏覽量

    6598
收藏 人收藏

    評論

    相關(guān)推薦

    SQLx的基礎(chǔ)用法和進(jìn)階用法

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

    SQLx在Rust語言中的基礎(chǔ)用法和進(jìn)階用法

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

    SeaORM的基礎(chǔ)用法

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

    基于Rust語言Hash特征的基礎(chǔ)用法和進(jìn)階用法

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

    如何使用Rust連接Redis

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

    Rust語言如何與 InfluxDB 集成

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

    如何在Rust中讀寫文件

    見的內(nèi)存安全問題和數(shù)據(jù)競爭問題。 在Rust中,讀寫文件是一項(xiàng)非常常見的任務(wù)。本教程將介紹如何在Rust中讀寫文件,包括基礎(chǔ)用法和進(jìn)階用法。 基礎(chǔ)
    的頭像 發(fā)表于 09-20 10:57 ?2035次閱讀

    求助if 語句用法

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

    verilog中g(shù)enerate語句用法分享

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

    淺談C語言goto語句用法

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

    generate語句的基本概念與用法

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

    SQL的經(jīng)典語句用法詳細(xì)說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是SQL的經(jīng)典語句用法詳細(xì)說明資料免費(fèi)下載
    發(fā)表于 10-22 16:11 ?5次下載

    verilog中的initial語句說明

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

    MySQL的match函數(shù)在sp中使用的BUG解析

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

    assign語句和always語句用法

    用法和功能。 一、Assign語句 Assign語句的定義和語法 Assign語句用于在HDL中連續(xù)賦值,它允許在設(shè)計中為信號或變量分配一個值。Assign
    的頭像 發(fā)表于 02-22 16:24 ?2529次閱讀
    RM新时代网站-首页