Rust中定义枚举

34 阅读1分钟

1.什么是枚举

枚举允许我们列举所有可能的值来定义一个类型

2.定义枚举

  • ip地址:ipv4,ipv6
enum ipaddrkind {
    v4,
    v6,
}

3.枚举值

let four = ipaddrkind::v4;
let six = ipaddrkind::v6;

枚举的变体都位于标识符的命名空间下,使用 :: 进行分隔

enum ipaddrkind {
    v4,
    v6,
}

fn main() {
    let four = ipaddrkind::v4;
    let six = ipaddrkind::v6;
    ip_route(four);
    ip_route(six);
    ip_route(ipaddrkind::v6);
    println!("Hello, world!");
}  

fn ip_route(ipkind: ipaddrkind) {

}

4.将数据附加到枚举的变体中

这样做的好处是不用再额外定义结构体

enum ipaddinfo {
    v4(u8,u8,u8,u8),
    v6(String),
}

fn main() {
    let home = ipaddinfo::v4(127, 0, 0, 1);
    let school = ipaddinfo::v6(String::from("2"));
}

5.标准库中的IpAddr

我们可以在枚举的变体中嵌入任意类型的数据

标准库中的就是嵌入了一个结构体

struct Ipv4Addr {

}

struct Ipv6Addr {

}

enum IpAddr {
    V4(Ipv4Addr),
    V6(Ipv6Addr),
}

6.为枚举定义方法

使用impl关键字为枚举定义方法

#[derive(Debug)]
enum ipaddinfo {
    v4(u8,u8,u8,u8),
    v6(String),
}

impl ipaddinfo {
    fn outip(&self) {
        println!("{:#?}",&self);
    }
}

fn main() {
    let home = ipaddinfo::v4(127, 0, 0, 1);
    let school = ipaddinfo::v6(String::from("2"));
    home.outip();
}