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
9a35a7310f
commit
138c582ccb
@ -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` 的方法:
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user