客户管理系统开发定制Rust:Match语句详解

基本语法:

Match客户管理系统开发定制这个词本身十分直观的描述了match客户管理系统开发定制语句的功能,也就是将value与pattern match起来,然后执行对应的表达式,基本语法如下所示
  1. match VALUE {
  2. PATTERN => EXPRESSION,
  3. PATTERN => EXPRESSION,
  4. PATTERN => EXPRESSION,
  5. }

book里一个简单的例子:

  1. enum Coin {
  2. Penny,
  3. Nickel,
  4. Dime,
  5. Quarter,
  6. }
  7. fn value_in_cents(coin: Coin) -> u8 {
  8. match coin {
  9. Coin::Penny => 1,
  10. Coin::Nickel => 5,
  11. Coin::Dime => 10,
  12. Coin::Quarter => 25,
  13. }
  14. }

当你在 => 后执行的语句不止一条时,需要加 {}

  1. fn value_in_cents(coin: Coin) -> u8 {
  2. match coin {
  3. Coin::Penny => {
  4. println!("Lucky penny!");
  5. 1
  6. },
  7. Coin::Nickel => 5,
  8. Coin::Dime => 10,
  9. Coin::Quarter => 25,
  10. }
  11. }

Match成功之后,对应的表达式可以使用用于匹配的value。

比如我们写一个enum Number,里面的两种类型时NumI8,NumU8,类型分别为i8,u8。创建num,类型为Number::NumI8。match语句里,num是我们将要进行匹配的value。由于Enum Number里的NumI8/U8是带参数的,所以match语句里的Number::NumI8也需要提供参数。例子里写的是_num。匹配成功后,_num会接受num的值,并可以在后面的表达式里使用。

  1. enum Number{
  2. NumI8(i8),
  3. NumU8(u8),
  4. }
  5. fn main(){
  6. let num = Number::NumI8(-5);
  7. match num {
  8. Number::NumI8(_num) => println!("{}",_num),
  9. Number::NumU8(_num) => println!("1"),
  10. }
  11. }
-5

Match语句的exhaustive(穷尽)特性:

match语句存在一个exhaustive特性,我觉得可以翻译为“穷尽”。也就是说match语句要求穷尽value的所有pattern。

  1. fn plus_one(x: Option<i32>) -> Option<i32> {
  2. match x {
  3. Some(i) => Some(i + 1),
  4. }
  5. }
  1. error[E0004]: non-exhaustive patterns: `None` not covered
  2. -->
  3. |
  4. | match x {
  5. | ^ pattern `None` not covered

当你不想穷尽所有可能的pattern的时候,Rust也提供了相应的解决办法:_ placeholder

 比如 u8 的范围为0~255,我们可能只关心其中几个“pattern” :1,3,5,7。这时候可以用_ placeholder代替其他所有pattern

  1. let some_u8_value = 0u8;
  2. match some_u8_value {
  3. 1 => println!("one"),
  4. 3 => println!("three"),
  5. 5 => println!("five"),
  6. 7 => println!("seven"),
  7. _ => (),
  8. }

当你只想匹配一种pattern时,Rust提供了一种语法糖:If let语句

比如:

  1. let some_u8_value = Some(0u8); //0u8的意思是一个u8类型的0
  2. match some_u8_value {
  3. Some(3) => println!("three"),
  4. _ => (),
  5. }

改写为:

  1. if let Some(3) = some_u8_value {
  2. println!("three");
  3. }

if let语句相比完整版要更简洁,但要注意的是:使用if let语句也就丧失了match语句的“穷尽”特性。

if let 与if语句的区别:

if let执行后续表达式(也就是上述例子中的:println!("three"); )的条件是match,而if执行后续表达式的条件是 true

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发