- Rust編程:入門、實戰與進階
- 朱春雷
- 489字
- 2021-04-30 12:37:25
3.4 if let和while let模式匹配
Rust提供了if let和while let模式匹配,在某些場景中可替代match模式匹配來簡化代碼。
代碼清單3-6中,match_value函數僅要求對Some(7)進行匹配操作,并不要求處理其他情況,但是為了滿足match模式窮盡匹配的要求,必須在處理Some(7)分支后加上“=> ()”分支。if_let_value函數使用if let簡化了這一處理邏輯。if let后緊跟的表達式中,左側為匹配模式,右側為要匹配的值,兩者通過等號分隔開。這里左側的匹配模式對應match的一個分支,可以將if let視為match的語法糖,僅當匹配某一模式時執行代碼,并忽略其他所有模式。
代碼清單3-6 if let
1 fn match_value(value: Option<i32>) { 2 match value { 3 Some(7) => println!("seven"), 4 _ => (), 5 } 6 } 7 8 fn if_let_value(value: Option<i32>) { 9 if let Some(7) = value { 10 println!("seven"); 11 } 12 }
代碼清單3-7中,match_vec函數通過loop循環遍歷動態數組vec,將元素依次取出并打印。pop方法返回Option類型,因此使用match模式匹配,Some(value)匹配vec中的元素,None匹配vec被取空的情況。while_let_vec函數使用while let簡化了這一處理邏輯。while let后緊跟的表達式中,左側為匹配模式,右側為要匹配的值,兩者通過等號分隔開。當vec中的元素被取空時,while循環會自動退出。
代碼清單3-7 while let
1 fn match_vec() { 2 let mut vec = vec![1, 2, 3, 4, 5]; 3 loop { 4 match vec.pop() { 5 Some(value) => println!("{}", value), 6 None => break, 7 } 8 } 9 } 10 11 fn while_let_vec() { 12 let mut vec = vec![1, 2, 3, 4, 5]; 13 while let Some(value) = vec.pop() { 14 println!("{}", value); 15 } 16 }
推薦閱讀
- Learning Spring 5.0
- 基于Java技術的Web應用開發
- 機器人Python青少年編程開發實例
- Flux Architecture
- 大數據分析與應用實戰:統計機器學習之數據導向編程
- Swift 4 Protocol-Oriented Programming(Third Edition)
- 智能手機APP UI設計與應用任務教程
- Python Interviews
- 平面設計經典案例教程:CorelDRAW X6
- Mastering Elixir
- Python計算機視覺和自然語言處理
- 交互式程序設計(第2版)
- Learning Concurrency in Python
- INSTANT JQuery Flot Visual Data Analysis
- PHP Microservices