Rust - 枚举
1、枚举
- 枚举允许我们列举所有可能的值来定义一个类型
1.1、定义枚举
// 定义枚举类型
enum IpAddrKind {
v4,
v6
}
fn main() {
// 定义枚举的值
let fout = IpAddrKind::v4;
let six = IpAddrKind::v6;
route(fout);
route(six);
route(IpAddrKind::v4)
}
fn route(ip_kind:IpAddrKind){}
1.2、把数据附加到枚举类型中
// 定义枚举类型
enum IpAddrKind {
v4,
v6
}
struct IpAddr{
Kind :IpAddrKind,
address : String,
}
fn main() {
let home = IpAddr{
Kind : IpAddrKind::v4,
address : String::from("127.0.0.1"),
};
let loopback = IpAddr{
Kind : IpAddrKind::v6,
address : String::from("::1"),
};
}
1.3、把数据附加到枚举变体中
- 就不用特意把类型存储在struct中
- 可以在枚举类型中嵌入不同类型的变体
// 定义枚举类型
enum IpAddrKind {
v4(u8,u8,u8,u8),
v6(String),
}
fn main() {
let home = IpAddrKind::v4(127, 0, 0, 1);
let loopback = IpAddrKind::v6(String::from("::1"));
}
1.4、为枚举定义方法
- 也是使用Impl定义
// 定义枚举类型
enum IpAddrKind {
v4(u8,u8,u8,u8),
v6(String),
}
impl IpAddrKind {
fn call(&self){}
}
fn main() {
let home = IpAddrKind::v4(127, 0, 0, 1);
let loopback = IpAddrKind::v6(String::from("::1"));
home.call();
loopback.call();
}
1.5、Option枚举
- 定义在标准库中
- 在Parelude(预导入模块)中
- 描述了:某个值可能存在(某种类型)或不存在的情况
- Rust没有NULL这个类型,使用了Option
来使用
fn main() {
let some_number = Some(5);
let some_String = Some("A String");
let absent_number : Option<i32> = None;
}
1.6、match控制流运算符
- 允许一个值与一系列模式进行匹配,并执行匹配的模式对于的代码
- 模式可以是字面量、变量名、通配符
- 枚举类型必须把所有穷举的可能都要写上
- 如果只想写几种结果,其他让系统自动匹配,则使用 _ 下划线
enum Coin {
Penny,
Nickkel,
Dime,
Quarter,
}
fn value_in_cents(coin:Coin) -> u8 {
match coin {
Coin::Penny => 1,
Coin::Dime => 5,
Coin::Nickkel => 10,
Coin::Quarter => 20,
}
}
推荐阅读: