2021-07-09

本文介绍了Rust编程语言中的枚举(包括定义、方法和使用)、模式匹配(如match运算符和Option枚举的处理)以及错误处理机制,特别是Result类型在处理可恢复错误时的角色。通过示例展示了如何定义枚举,如何使用match进行控制流,以及如何处理Option枚举的不同情况。此外,还讨论了Rust中空值的概念以及如何通过if let简化控制流。
摘要由CSDN通过智能技术生成

Trait std::convert::AsRef

Trait std::convert::AsMut

枚举和模式匹配:

定义枚举

枚举值

可以将任意类型的数据放入枚举成员中:例如字符串、数字类型或者结构体。甚至可以包含另一个枚举!另外,标准库中的类型通常并不比你设想出来的要复杂多少。

enum Message {
    Quit,
    Move { x: i32, y: i32 },
    Write(String),
    ChangeColor(i32, i32, i32),
}

这个枚举有四个含有不同类型的成员:

  • Quit 没有关联任何数据。
  • Move 包含一个匿名结构体。
  • Write 包含单独一个 String。
  • ChangeColor 包含三个 i32。

枚举中也可以定义方法

option枚举

rust中没有空值

  • 空值是一个因为某种原因目前无效或缺失的值。
enum Option<T> {
    Some(T),
    None,
}

match 控制流运算符

match本身也是个表达式,Rust就是基于表达式的语言。


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 => 25,
    }
}
  • 匹配Option
  • Rust 中的匹配是 穷尽的(exhaustive)

_ 通配符

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

_ 将会匹配所有之前没有指定的可能的值。() 就是 unit 值,所以 _ 的情况什么也不会发生。因此,可以说我们想要对 _ 通配符之前没有列出的所有可能的值不做任何处理。

if let 简单控制流

let mut count = 0;
if let Coin::Quarter(state) = coin {
    println!("State quarter from {:?}!", state);
} else {
    count += 1;
}

匹配模式的全部语法

  • 匹配字面值- 匹配命名变量

  • 多个模式 在 match 表达式中,可以使用 | 语法匹配多个模式,它代表 或(or)的意思。

  • 通过 …= 匹配值的范围 如果 x 是 1、2、3、4 或 5,第一个分支就会匹配。这相比使用 | 运算符表达相同的意思更为方便;相比 1…=5,使用 | 则不得不指定 1 | 2 | 3 | 4 | 5。相反指定范围就简短的多,特别是在希望匹配比如从 1 到 1000 的数字的时候!

  • 解构并分解值

    • 解构结构体
    • 解构枚举

Result 与可恢复的错误

匹配不同的错误

失败时 panic 的简写:unwrap 和 expect

传播错误

当编写一个其实现会调用一些可能会失败的操作的函数时,除了在这个函数中处理错误外,还可以选择让调用者知道这个错误并决定该如何处理。这被称为 传播(propagating)错误,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值