From 579c4cf81c107ba2217046f84e038fba73881ca6 Mon Sep 17 00:00:00 2001 From: Unisko PENG Date: Tue, 4 Apr 2023 10:10:09 +0800 Subject: [PATCH] Update Ch20 --- hello/src/lib.rs | 1 - src/Ch10_Generic_Types_Traits_and_Lifetimes.md | 2 +- ...ject_Building_a_Multithreaded_Web_Server.md | 18 +++++++++++++++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/hello/src/lib.rs b/hello/src/lib.rs index 26734d2..27be655 100644 --- a/hello/src/lib.rs +++ b/hello/src/lib.rs @@ -10,6 +10,5 @@ impl ThreadPool { where F: FnOnce() + Send + 'static, { - } } diff --git a/src/Ch10_Generic_Types_Traits_and_Lifetimes.md b/src/Ch10_Generic_Types_Traits_and_Lifetimes.md index 34dde2f..81cb4b2 100644 --- a/src/Ch10_Generic_Types_Traits_and_Lifetimes.md +++ b/src/Ch10_Generic_Types_Traits_and_Lifetimes.md @@ -13,7 +13,7 @@ ### 通过提取出函数,而去除重复 -泛型特性,实现了以占位符表示多种类型方式,而替换掉那些特定类型,从而消除了代码重复。在进入到泛型语法之前,那么就要首先来看看,怎样以不涉及泛型的,而是通过提取出函数,以将一些特定值用一个表示多个值的占位符加以替换,这样的方式消除重复。随后就会把这同样技巧,应用到提取出泛型函数上!经由了解怎样识别出重复代码,就可以提取出函数来,这样亦将发现那些可使用泛型特性的重复代码。 +泛型特性,实现了以占位符表示多种类型方式,而替换掉那些特定类型,从而消除了代码重复。在进入到泛型语法之前,那么就要首先来看看,怎样以不涉及泛型的,而是通过提取出函数,而将一些特定值,用一个表示多个值的占位符加以替换,以这样的方式消除重复。随后就会把这同样技巧,应用到提取出泛型函数上!经由了解怎样识别出重复代码,就可以提取出函数来,这样亦将发现那些可使用泛型特性的重复代码。 这里会以下面清单 10-1 中,找出清单里极大数的简短程序开始。 diff --git a/src/Ch20_Final_Project_Building_a_Multithreaded_Web_Server.md b/src/Ch20_Final_Project_Building_a_Multithreaded_Web_Server.md index 34899dc..91c2871 100644 --- a/src/Ch20_Final_Project_Building_a_Multithreaded_Web_Server.md +++ b/src/Ch20_Final_Project_Building_a_Multithreaded_Web_Server.md @@ -709,7 +709,23 @@ impl ThreadPool { where F: FnOnce() + Send + 'static, { - } } ``` + +由于这个 `FnOnce` 表示一个不会取参数,且返回的是单元类型 `()` 的闭包,因此咱们仍旧使用了 `FnOnce` 后的 `()`。就跟函数定义一样,返回值类型可以在签名中省略,但即使咱们没有参数,咱们仍需这对括号。 + +又一次,这仍是那个 `execute` 方法的极简实现:他什么也没做,但咱们只是在试着让咱们的代码编译。咱们再来对其加以检查: + +```console +$ cargo check + Checking hello v0.1.0 (/home/lenny.peng/rust-lang-zh_CN/hello) + Finished dev [unoptimized + debuginfo] target(s) in 0.36s +``` + +他编译了!不过请注意,当咱们尝试 `cargo run` 并在浏览器中构造一次请求时,咱们将看到浏览器中,一些咱们在本章开头曾看到过的报错。咱们的库尚未真正调用传递给 `execute` 的那个闭包! + +> 注意:咱们或许听说过与有着严格编译器语言,比如 Haskell 与 Rust,有关的一种说法,即 “若代码编译了,他就会工作。” 然而这种说法并非一概而论。咱们的项目编译了,但他绝对什么也没干!若咱们是在构建一个真实、完整的项目,那么此时就将是开始编写检查代码编译与否,*以及* 是否具有咱们想要的行为的单元测试的好时机。 + + +