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();
}