mirror of
https://github.com/gnu4cn/rust-lang-zh_CN.git
synced 2024-12-25 20:30:34 +08:00
Refining Ch06.
This commit is contained in:
parent
bd23125ee6
commit
6bae7063bf
@ -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`,来表达这个概念。下面就是该枚举的变种:
|
||||
|
Loading…
Reference in New Issue
Block a user