今天学习的内容是 Rust 中的枚举类型。
枚举类型
枚举类型也叫枚举,用来组织有限的值,归为一个类型。
使用 enum
关键字来声明一个枚举类型,枚举类型的成员称为变体。
枚举有多种不同的写法,包括:
- 不带值的枚举
- 带值的枚举
- 带参数的枚举
比如,定义一个行星类型的枚举,它的成员有两个:Mars 和 Earth:
enum Planet {
Mars,
Earth,
}
如果没有给成员显式赋值,那么枚举值默认从 0 开始存储。
在声明枚举类型时,可以显式的给成员赋值。比如定义一个 HTTP 响应的状态码:
enum State {
OK: 200,
NotFound: 404,
Error: 500,
}
在声明枚举类型时,还可以给成员带上参数,类似于函数的调用。
enum IpAddr {
IPv4(u8, u8, u8, u8),
IPv6(u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8),
}
这种类型的枚举是 Rust 和其他语言差别最大的一种枚举。
模式匹配
要使用枚举类型,需要使用模式匹配。
enum IpAddr {
IPv4(u8, u8, u8, u8),
IPv6(u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8),
}
fn main() {
let localhost: IpAddr = IpAddr::IPv4(127, 0, 0, 1);
match localhost {
IpAddr::IPv4(a, b, c, d) => {
println!("{} {} {} {}", a, b, c, d)
}
_ => {} // 任何非 IPv4 类型走这条分支
}
}
小结
Rust 中的枚举类型,类似结构体类型,主要用来创建用户自定义的类型,不同之处是它会包含所有可被列举的值。要使用枚举类型的值,需要配合模式匹配语法。