Merge pull request #874 from Rainanxu/main

修正一些文字描述问题。
pull/875/head
KaiserY 6 days ago committed by GitHub
commit 6d7f42fe72
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -59,7 +59,7 @@
`Clone` trait 可以明确地创建一个值的深拷贝deep copy复制过程可能包含任意代码的执行以及堆上数据的复制。查阅第四章 [“使用克隆的变量与数据交互”][variables-and-data-interacting-with-clone] 以获取有关 `Clone` 的更多信息。
派生 `Clone` 实现了 `clone` 方法,当其为整个类型实现时,会在类型的每一部分上调用 `clone` 方法。这意味着类型中所有字段或值也必须实现了 `Clone`,这样才能够派生 `Clone`
派生 `Clone` 实现了 `clone` 方法,当其为整个类型实现时,会在类型的每一部分上调用 `clone` 方法。这意味着类型中所有字段或值也必须实现了 `Clone`,这样才能够派生 `Clone`
例如,当在一个 slice 上调用 `to_vec` 方法时,`Clone` 是必须的。slice 并不拥有其包含的实例,但是从 `to_vec` 中返回的 vector 需要拥有它们的实例,因此 `to_vec` 在每个元素上调用 `clone`。所以存储在切片中的类型必须实现 `Clone`

@ -255,4 +255,4 @@ HTTP/1.1 200 OK\r\n\r\n
好极了!我们现在有了一个 40 行左右 Rust 代码的小而简单的服务端,它对一个请求返回页面内容而对所有其他请求返回 404 响应。
目前服务端运行于单线程中,这意味着它一次只能处理一个请求。让我们模拟一些慢请求来看看这何会成为一个问题。然后我们将修复它使得服务端能够同时处理多个请求。
目前服务端运行于单线程中,这意味着它一次只能处理一个请求。让我们模拟一些慢请求来看看这何会成为一个问题。然后我们将修复它使得服务端能够同时处理多个请求。

@ -29,7 +29,7 @@
这里的错误告诉我们并不能调用 `join`,因为我们只有每一个 `worker` 的可变借用,而 `join` 需要获取其参数的所有权。为了解决这个问题,需要一个方法将 `thread` 移动出拥有其所有权的 `Worker` 实例以便 `join` 可以消费这个线程。示例 18-15 中我们曾见过这么做的方法:如果 `Worker` 存放的是 `Option<thread::JoinHandle<()>`,就可以在 `Option` 上调用 `take` 方法将值从 `Some` 成员中移动出来而对 `None` 成员不做处理。换句话说,正在运行的 `Worker``thread` 将是 `Some` 成员值,而当需要清理 worker 时,将 `Some` 替换为 `None`,这样 worker 就没有可以运行的线程了。
然而,这种情况**只**会在丢弃 `Worker` 时出现。相应地,我们必须在任何访问 `worker.thread` 处理 `Option<thread::JoinHandle<()>>`。在惯用的 Rust 代码中 `Option` 用的很多,但当你发现自己总是知道 `Option` 中一定会有值,却还要将其包装在 `Option` 中来应对这一场景时,就应该考虑其他更优雅的方法了。
然而,这种情况**只**会在丢弃 `Worker` 时出现。相应地,我们必须在任何访问 `worker.thread` 处理 `Option<thread::JoinHandle<()>>`。在惯用的 Rust 代码中 `Option` 用的很多,但当你发现自己总是知道 `Option` 中一定会有值,却还要将其包装在 `Option` 中来应对这一场景时,就应该考虑其他更优雅的方法了。
在这个例子中,存在一个更好的替代方案:`Vec::drain` 方法。它接受一个 range 参数来指定哪些项要从 `Vec` 中移除,并返回一个这些项的迭代器。使用 `..` range 语法会从 `Vec` 中移除**所有**值。

Loading…
Cancel
Save