|
|
|
@ -340,7 +340,7 @@ impl State for Published {
|
|
|
|
|
|
|
|
|
|
另一个重复是 `Post` 中 `request_review` 和 `approve` 这两个类似的实现。他们都委托调用了 `state` 字段中 `Option` 值的同一方法,并在结果中为 `state` 字段设置了新值。如果 `Post` 中的很多方法都遵循这个模式,我们可能会考虑定义一个宏来消除重复(查看第十九章的 [“宏”][macros] 部分)。
|
|
|
|
|
|
|
|
|
|
完全按照面向对象语言的定义实现这个模式并没有没有尽可能的利用 Rust 的优势。让我们看看一些代码中可以做出的修改,来将无效的状态和状态转移变为编译时错误。
|
|
|
|
|
完全按照面向对象语言的定义实现这个模式并没有尽可能的利用 Rust 的优势。让我们看看一些代码中可以做出的修改,来将无效的状态和状态转移变为编译时错误。
|
|
|
|
|
|
|
|
|
|
#### 将状态和行为编码为类型
|
|
|
|
|
|
|
|
|
@ -478,4 +478,4 @@ fn main() {
|
|
|
|
|
接下来,让我们看看另一个提供了多样灵活性的 Rust 功能:模式。贯穿全书的模式, 我们已经和它们打过照面了,但并没有见识过它们的全部本领。让我们开始探索吧!
|
|
|
|
|
|
|
|
|
|
[more-info-than-rustc]: ch09-03-to-panic-or-not-to-panic.html#cases-in-which-you-have-more-information-than-the-compiler
|
|
|
|
|
[macros]: ch19-06-macros.html#macros
|
|
|
|
|
[macros]: ch19-06-macros.html#macros
|
|
|
|
|