Rust 入门 枚举

枚举

  • 枚举(enumerations)允许我们列举所有可能的值来定义一个类型
  • 这些可能值被称为枚举的成员(variants) 有时称为变体

定义枚举

enum IpAddrKind {
    V4,
    V6,
}

枚举值

let four = IpAddrKind::V4;
let six = IpAddrKind::V6;
  • 枚举的变体都位于标识符的命名空间下, 使用户::进行访问

将数据存入枚举值中

enum IpAddrKind {
    V4(u8,u8,u8,u8),
    V6(String),
}

fn main() {
    let _four = IpAddrKind::V4(127, 0, 0, 1);
    let _six = IpAddrKind::V6(String:from("::1"));
}

枚举方法

  • 和结构体方法的编写一样
impl IpAddrKind {
    fn ping(&self) {
        // TODO
    }
}

Option 枚举

  • Option 枚举存在于标准库中, 位于Prelude(预导入模块) 中
  • 描述某个值(数据类型)可能存在或者不存在的情况
// 标准库中的Option枚举
// <T> 表示泛型, 以后会讲
enum Option<T> {
    Some(T),
    None,
}
  • 使用 Option 枚举带表达空值
fn main() {
    let some_number: Option<i32> = Some(5);
    let absent_number: Option<i32> = None;
}
  • Option<T> 和 T 是不同的类型, 不可以把 Option<T> 直接作为 T 来使用

使用 match 匹配枚举

  • match 表达式 可以从枚举中提取绑定的值
fn main() {
    let number = Option::Some(5);
    match number {
        Option::Some(value) => println!("value={}",value),
        Option::None => println!("null"),
    }
}

使用 if let 匹配枚举

  • if let 处理之关系的一种匹配模式, 忽略其他匹配模式
fn main() {
    let number = Option::Some(5);
    if let Some(value) = number {
        println!("value={}", value)
    }
}
  • if let 常用于处理错误
fn main() {
    let number: Option<i32> = Option::None;
    if let Option::None = number {
        eprintln!("null pointer exception");
    }
}
  • if let 也可以配合 else 分支使用
如果对我分享的内容感兴趣的话  记得关注我得动态
求推荐  求收藏  求转发  求关注
posted @ 2021-06-22 14:06  Delayer  阅读(116)  评论(0编辑  收藏  举报