0 前言
是我的一点学习笔记,因为本身内容就不多、不复杂,所以这一篇内容结构与原文基本一致,但是是我个人理解原文的一个思路过程的记录。
枚举,enums
,如果你了解ts
、python
、c/cpp
、java
那你可能会觉得很熟悉,但是又很不同,rust
的枚举更丰富、更灵活、更方便、更强大。
所以你准备走进rust
的枚举类型了吗?
原文链接:Rust程序设计语言
1 枚举
rust
有两种枚举,一个是enum
,一个是option
,我们一个一个来看。
1.1 enum
以IPv4和IPv6为例
// 以下是伪代码,不可直接运行
// 1 定义enum
enum IpAddrKind {
V4,
V6,
}
// 2 实例化enum
let four = IpAddrKind::V4;
let six = IpAddrKind::V6;
// 3 函数可以以enum为入参
fn route(ip_type: IpAddrKind) {
}
// 4 使用函数
route(IpAddrKind::V4);
route(IpAddrKind::V6);
以上是最简单的写法,那么在此之上,我们是否可以将enum与struct结合起来,从而实现更加复杂的enum类型呢?显然是可以的
enum IpAddrKind {
V4,
V6,
}
struct IpAddr {
kind: IpAddrKind,
address: String,
}
let home = IpAddr {
kind: IpAddrKind::V4,
address: String::from("127.0.0.1"),
};
let loopback = IpAddr {
kind: IpAddrKind::V6,
address: String::from("::1"),
};
而事实上,我们没有必要把枚举作为结构体的一部分,而是可以直接给枚举成员赋值,就像下面这样
enum IpAddr {
V4(String),
V6(String),
}
let home = IpAddr::V4(