rust中的match表達(dá)式使用詳解
match使用
在rust中提供了一個(gè)極為強(qiáng)大的控制流運(yùn)算符match
match允許一個(gè)值與一系列模式進(jìn)行匹配,并執(zhí)行匹配的模式對(duì)應(yīng)的代碼- 這些模式可以是
子面值、變量名、通配符等等
來(lái)個(gè)例子
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!("多行的情況需要加上花括號(hào)");
25
},
}
}綁定值的模式
匹配的分支可以綁定到被匹配對(duì)象的部分值,因此我們可以從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要匹配的變體太多了,我們不想處理那么多該怎么辦呢?
- 可以使用通配符
_來(lái)替代其余沒(méi)列出的值
fn main() {
let v = 0u8;
match v {
1 => println!("one"),
2 => println!("two"),
3 => println!("three"),
// 其他的不想匹配了,可以使用`_`替代,下?lián)Q線通配符只能放到最后一行
_ => println!("other")
}
}match語(yǔ)法糖【if let】
上述的例子可以使用if let控制流進(jìn)行改寫(xiě)
fn main() {
let v = 0u8;
match v {
1 => println!("one"),
2 => println!("two"),
3 => println!("three"),
// 其他的不想匹配了,可以使用`_`替代,下?lián)Q線通配符只能放到最后一行
_ => println!("other"),
}
// 可以使用let進(jìn)行簡(jiǎn)寫(xiě)
if let 3 = v {
println!("three");
} else {
println!("other")
}
}小結(jié)一下if let的作用
- 處理只關(guān)心一種匹配二忽略其他匹配的情況
- 更少的代碼、更少的縮進(jìn)、更少的模板代碼
- 放棄了窮舉的可能
- 我們可以把
if let當(dāng)做是match的語(yǔ)法糖
匹配Option
fn main() {
let five = Some(5);
let six = plus_one(five);
let none = plus_one(None);
// 使用模式匹配和Option可以避免其他語(yǔ)言出現(xiàn)NPE的問(wèn)題
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表達(dá)式的文章就介紹到這了,更多相關(guān)rust match表達(dá)式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Rust編寫(xiě)自動(dòng)化測(cè)試實(shí)例權(quán)威指南
這篇文章主要為大家介紹了Rust編寫(xiě)自動(dòng)化測(cè)試實(shí)例權(quán)威指南詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
rust 一個(gè)日志緩存記錄的通用實(shí)現(xiàn)方法
本文給出了一個(gè)通用的設(shè)計(jì)模式,通過(guò)建造者模式實(shí)例化記錄對(duì)象,可自定義格式化器將實(shí)例化后的記錄對(duì)象寫(xiě)入到指定的緩存對(duì)象中,這篇文章主要介紹了rust 一個(gè)日志緩存記錄的通用實(shí)現(xiàn)方法,需要的朋友可以參考下2024-04-04
如何使用bindgen將C語(yǔ)言頭文件轉(zhuǎn)換為Rust接口代碼
這篇文章主要介紹了使用bindgen將C語(yǔ)言頭文件轉(zhuǎn)換為Rust接口代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-01-01
Rust語(yǔ)言之使用Polar權(quán)限管理方法詳解
權(quán)限管理 (Permission Management) 是一個(gè)涵蓋了系統(tǒng)或網(wǎng)絡(luò)中用戶權(quán)限控制和管理的系統(tǒng),本文將詳細(xì)給大家介紹Rust語(yǔ)言中如何使用Polar權(quán)限管理,需要的朋友可以參考下2023-11-11
如何使用VSCode配置Rust開(kāi)發(fā)環(huán)境(Rust新手教程)
這篇文章主要介紹了如何使用VSCode配置Rust開(kāi)發(fā)環(huán)境(Rust新手教程),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07

