mirror of
https://github.com/gnu4cn/rust-lang-zh_CN.git
synced 2024-12-28 22:01:08 +08:00
Update Ch20
This commit is contained in:
parent
249c96626b
commit
579c4cf81c
@ -10,6 +10,5 @@ impl ThreadPool {
|
||||
where
|
||||
F: FnOnce() + Send + 'static,
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -13,7 +13,7 @@
|
||||
|
||||
### 通过提取出函数,而去除重复
|
||||
|
||||
泛型特性,实现了以占位符表示多种类型方式,而替换掉那些特定类型,从而消除了代码重复。在进入到泛型语法之前,那么就要首先来看看,怎样以不涉及泛型的,而是通过提取出函数,以将一些特定值用一个表示多个值的占位符加以替换,这样的方式消除重复。随后就会把这同样技巧,应用到提取出泛型函数上!经由了解怎样识别出重复代码,就可以提取出函数来,这样亦将发现那些可使用泛型特性的重复代码。
|
||||
泛型特性,实现了以占位符表示多种类型方式,而替换掉那些特定类型,从而消除了代码重复。在进入到泛型语法之前,那么就要首先来看看,怎样以不涉及泛型的,而是通过提取出函数,而将一些特定值,用一个表示多个值的占位符加以替换,以这样的方式消除重复。随后就会把这同样技巧,应用到提取出泛型函数上!经由了解怎样识别出重复代码,就可以提取出函数来,这样亦将发现那些可使用泛型特性的重复代码。
|
||||
|
||||
这里会以下面清单 10-1 中,找出清单里极大数的简短程序开始。
|
||||
|
||||
|
@ -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,有关的一种说法,即 “若代码编译了,他就会工作。” 然而这种说法并非一概而论。咱们的项目编译了,但他绝对什么也没干!若咱们是在构建一个真实、完整的项目,那么此时就将是开始编写检查代码编译与否,*以及* 是否具有咱们想要的行为的单元测试的好时机。
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user