Refining Ch06.

This commit is contained in:
rust-lang.xfoss.com 2023-12-18 09:43:31 +08:00
parent 9a35a7310f
commit 138c582ccb

View File

@ -155,16 +155,18 @@ enum Message {
该枚举有着分别嵌入了不同类型的四个变种:
- `Quit` 变种完全没有与其关联的数据;
- `Move` 变种像结构体一样,有着两个命名的字段
- `Quit` 完全没有与其关联的数据
- `Write` 变种包含了单个 `String`
- `Move` 有着一些命名的字段,就像结构体那样
- `ChangeColor` 编程包含了三个 `i32` 的值。
- `Write` 包含单个 `String`
- `ChangeColor` 包含了三个 `i32` 的值。
定义一个有着一些如上面清单 6-2 中变种的枚举,与定义不同种类的结构体定义类似,不同在于枚举未使用关键字 `struct`,且所有变种在 `Message` 类型下组织在了一起。下面这些结构体,就可保存之前各个枚举变种所保存的那些同样数据:
定义有着如清单 6-2 中的那些变种的枚举,类似于定义不同种类的结构体定义,只是枚举没有使用 `struct` 关键字,且全部变种都在 `Message` 这个类型下编组在一起。下面的结构体,可以保存与前面那些枚举变种,同样的数据:
```rust
struct QuitMessage; // 单元结构体
@ -176,7 +178,8 @@ struct WriteMessage(String); // 元组结构体
struct ChangeColorMessage(i32, i32, i32); // 元组结构体
```
不过假如这里使用了不同的、有着各自类型的结构体,那么就无法轻易地定义出一个接收原本在清单 6-2 中定义的、单一类型的 `Message` 枚举那样的,接收全部这些类别消息的函数了。
但是,如果我们使用不同结构体(每个结构体都有自己的类型),我们就无法像使用清单 6-2 中定义的 `Message` 枚举(这是一种单一类型)那样,轻松定义出取任何一种这些类别消息。
枚举与结构体之间,还有另外一个相似点:正如在结构体上使用 `impl` 关键字定义出一些方法,在枚举上定义方法也是可以的。下面就是一个可定义在这里的 `Message` 枚举上、名为 `call` 的方法: