官术网_书友最值得收藏!

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  }
主站蜘蛛池模板: 高青县| 乌兰浩特市| 新绛县| 武乡县| 苍梧县| 三江| 成安县| 九江县| 治县。| 溆浦县| 崇文区| 墨玉县| 桂阳县| 玉环县| 耒阳市| 绿春县| 石阡县| 鄯善县| 青田县| 微山县| 拉孜县| 乡城县| 晴隆县| 庐江县| 铁力市| 清苑县| 石景山区| 封开县| 杨浦区| 保康县| 鸡东县| 娄烦县| 咸丰县| 佳木斯市| 赤城县| 天水市| 马山县| 五台县| 云浮市| 孟连| 同江市|