06 Rust 枚举类

简单使用

enum Person {
   
    Good,
    Bad
}

let p1 = Person::Good;

为枚举成员添加属性

#[derive(Debug)]
enum Person {
   
    Good(String),           // 元组的方式描述属性
    Bad {
    name: String },   // 结构体方式描述属性, 可为属性命名
}

fn main() {
   
    let p1 = Person::Good("Jim".to_string());
    let p2 = Person::Bad {
   
        name: "Tom".to_string(),
    };
    
    match p1 {
   
        // 元组属性名称可自定义化, 但顺序需一致
        Person::Good(n) => {
   
            println!("{}, Good person", n);
        },
        // 结构体形式名称需和定义时一致
        Person::Bad {
   name} => {
   
            println!("{}, Bad person", name);
        }
    }

    // 使用 if let 语法进行枚举类型判断
    if let Person::Good(_) = p2 {
   
        println!("Good person");
    } else {
   
        println!("Not a good person");
    }
}

Option 枚举类

Rust 在语言层面彻底不允许空值 null 的存在,但无奈null 可以高效地解决少量的问题,为此引入了 Option 枚举类

enum Option<T> {
   
    Some(T),
    None,
}
let opt = Option::Some("Hello");

// 在使用前进行判断
if let Option::None = opt {
   
    println!("opt is none!");
    return;
}

// 通过 unwrap 获取 Some 内部实际值
println!("{}", opt.unwrap());

// 初始值为空的 Option 必须明确类型
let opt: Option<&str> = Option::None;

// 由于 Option 是 Rust 编译器默认引入的
// 在使用时可以省略 Option:: 直接写 None 或者 Some()
match opt {
   
    Some(value) => println!("{}", value),
    None => println!("opt is None"),
}

相关推荐

  1. 06 Rust

    2023-12-18 13:04:02       38 阅读
  2. Rust-08-和模式匹配

    2023-12-18 13:04:02       8 阅读
  3. Kotlin

    2023-12-18 13:04:02       41 阅读
  4. 练习

    2023-12-18 13:04:02       10 阅读
  5. 简单使用

    2023-12-18 13:04:02       36 阅读
  6. Rust】结构体与

    2023-12-18 13:04:02       31 阅读
  7. 06-和模式匹配

    2023-12-18 13:04:02       35 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-18 13:04:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-18 13:04:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-18 13:04:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-18 13:04:02       20 阅读

热门阅读

  1. 【微服务】服务间调用

    2023-12-18 13:04:02       37 阅读
  2. 逻辑回归正则化

    2023-12-18 13:04:02       31 阅读
  3. tomcat如何进行安全加固

    2023-12-18 13:04:02       44 阅读
  4. VSCode 常用的快捷键和技巧系列(1)

    2023-12-18 13:04:02       37 阅读
  5. Golang WebView:打造跨平台的桌面应用

    2023-12-18 13:04:02       31 阅读
  6. 卷积的计算 - im2col 3

    2023-12-18 13:04:02       36 阅读
  7. React状态管理详解

    2023-12-18 13:04:02       36 阅读
  8. C/C++ extern关键字

    2023-12-18 13:04:02       36 阅读