1. 模式
匹配類型中的結(jié)構(gòu)(數(shù)據(jù)的形狀),結(jié)合 模式和match表達式 提供程序控制流的支配權(quán)
- 模式組成內(nèi)容
- 字面量
- 解構(gòu)的數(shù)組、枚舉、結(jié)構(gòu)體、元組
- 變量
- 通配符
- 占位符
流程:匹配值 --> 是否擁有正確的數(shù)據(jù) --> 運行特定的代碼
2. 使用模式的位置
- match分支:由match關(guān)鍵字、一個匹配的值和一個或多個分支構(gòu)成
- 窮盡性:所有可能的值都必須考慮到
- _: 匹配所有情況,不綁定任何變量
enum Status {
// 其中對應(yīng)的值通過 Status::OK as i32方式取出
OK = 200,
NotFound = 404,
Create = 201
}
fn main() {
let status = Status::OK;
match status {
// 將枚舉
Status::OK => println!("{}", Status::OK as i32),
_ => println!()
}
}
- if let 語句
只關(guān)心一種情況的match分支的簡寫,可選的else在模式不匹配時執(zhí)行,可以靈活搭配 else if 、else if let,搭配之間不需要關(guān)聯(lián)性
- while let 條件循環(huán)
只要模式匹配就一直進行while循環(huán)
fn main() {
let mut stack = Vec::new();
// 推入數(shù)據(jù)
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
// 彈出數(shù)據(jù)
while let Some(v) = stack.pop() {
println!("value: {}", v)
}
}
- for循環(huán)
模式是for關(guān)鍵字直接跟隨的值
fn main() {
let valuse = vec![1, 2, 3, 4, 5];
// 遍歷vector,使用了模式對元祖進行解構(gòu)
for (index, value) in valuse.iter().enumerate() {
println!("index: {}, value: {}", index, value)
}
}
- let 語句
將模式與表達式進行比較,并為任何找到的名稱賦值
fn main() {
// 結(jié)構(gòu)元祖
let (x, y, z) = (1, 2, 3);
println!("{}, {}, {}", z, y, x);
// 普通變量聲明
let x = 5;
}
- 函數(shù)參數(shù)
與let語句一致文章來源:http://www.zghlxwxcb.cn/news/detail-426275.html
fn function_pattern(&(x, y): &(i32, i32)) -> i32 {
x + y
}
fn main() {
let num = (1, 2);
let sum = function_pattern(&num);
println!("sum: {}", sum)
}
3. 模式分類
依據(jù):匹配是否可能失敗文章來源地址http://www.zghlxwxcb.cn/news/detail-426275.html
- 不可反駁: 能匹配任何傳遞的可能值
- let語句 for循環(huán) 函數(shù)
- 可反駁: 對某些可能存在的值進行匹配會失敗
- if let、 while let、match分支
4. 模式語法
- 匹配字面量
fn main() {
let name = "beimen";
match name {
"beimen" => println!("beimen"),
"chuixue" => println!("chuixue"),
_ => println!("unknown")
}
}
到了這里,關(guān)于Rust -- 模式與匹配的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!