Refining Ch06.

This commit is contained in:
rust-lang.xfoss.com 2023-12-15 17:06:06 +08:00
parent bd23125ee6
commit 6bae7063bf

View File

@ -1,7 +1,11 @@
# 定义一个枚举
枚举是不同于结构体的第二种定义定制数据类型的方式。下面就来看看一种在代码中可能表达的情形,并见识一下为何在此情形下,相比于结构体,枚举是有用且更恰当的。假设说这里需要对 IP 地址进行处理。目前仅有两种用于 IP 地址的标准:版本四和版本六。由于这两个标准是程序将遇到的 IP 地址仅有的可能性,因此就可以 *列举出enumerate* 全部可能的变种这正是枚举enumeration 名字得来之处。
**Defining an Enum**
结构体提供了一种将相关字段和数据,分组在一起的方法,比如有着 `width``height` 两个字段的 `Rectangle`,而枚举则提供了一种,表示一个值是一组可能值之一的方法。例如,我们可能想表达,`Rectangle` 是一组其中还包括 `Circle``Triangle` 等可能形状之一。为此Rust 允许我们,将这些可能性编码为某个枚举。
我们来看看我们可能想在代码中表达的一种情况,看看为什么在这种情况下,枚举要比结构体更有用、更合适。假设我们需要处理 IP 地址。目前IP 地址使用两种主要标准:第四版和第六版。由于我们的程序只会遇到这两种可能的 IP 地址,因此我们可以枚举所有可能的变体,这就是枚举名称的由来。
任何 IP 地址都只能是版本四或版本六的地址,而不会同时两个都是。由于枚举值只能是枚举变种之一,那么 IP 地址的这个属性令到枚举数据结构the enum data structure恰当起来。而版本四和版本六两种地址从根本上说都是 IP 地址,那么在代码对适用于任意类别 IP 地址的情形加以处理时,版本四和版本六地址都应当作同一类型对待。
在代码中,可通过定义一个 `IpAddrKind` 枚举,并列出 IP 地址可能的类别,即 `V4``V6`,来表达这个概念。下面就是该枚举的变种: