enum 和 match

定义一个 enum 枚举

常规枚举

#![allow(unused)]
fn main() {
enum IpAddrKind {
    V4,
    V6,
}
}

带数据的枚举

  • 枚举的每个成员可以有不同的数据类型
#![allow(unused)]
fn main() {
enum IpAddr {
    V4(u8, u8, u8, u8),
    V6(String),
}


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

}
  • 也可以带srtuct结构体
#![allow(unused)]
fn main() {
struct Info {
    addr: String,
    desc: String,
}
enum IpAddr {
    V4(Info),
    V6(Info),
}
}

使用枚举

使用枚举值

enum IpAddr {
    V4,
    V6,
}
    
fn main() {
    let v4 = IpAddr::V4;
}

打印枚举和打印结构体一样,要在枚举上加上 #[dervice(Debug)]

#[derive(Debug)]
enum IpAddr {
    V4,
    V6,
}
    
fn main() {
    let v4 = IpAddr::V4;
    let v6 = IpAddr::V6;
    println!("{:?}", v4);
    println!("{:?}", v6);
}

Option枚举

这是定义在 rust 标准库中的枚举,用于处理可能不存在的值

源码:

#![allow(unused)]
fn main() {
pub enum Option<T> {
    None,
    Some(T),
}
}

使用:

fn main() {
    let user = Option::Some("i am a user");
    match user {
        Some(user) => println!("{}", user),
        None => println!("none"),
    }
}

match