mirror of
https://github.com/gnu4cn/rust-lang-zh_CN.git
synced 2026-08-19 04:33:27 +08:00
Finished 'src/Ch00_Forword_and_Introduction.md'
This commit is contained in:
@@ -118,7 +118,7 @@ Rust 语言希望也能支持许多其他用户;这里提到的只是一些最
|
||||
[第 16 章](./Ch16_Fearless_Concurrency.md),咱们将过目不同的并发编程模型,并探讨 Rust 如何帮助咱们大胆地以多线程方式编程。在 [第 17 章](./Ch16_1_async_programming.md) 中,我们在此基础上探讨 Rust 的 `async` 与 `await` 语法,以及任务、未来值与流,以及他们所实现的轻量级并发模型。
|
||||
|
||||
|
||||
[第 18 章](./Ch17_Object_Oriented_Programming_Features_of_Rust.md) 着眼于 Rust 习语如何与咱们可能熟悉的面向对象编程原则进行比较。[第 19 章](./Ch18_Patterns_and_Matching.md) 是关于模式和模式匹配的参考,他们是在整个 Rust 程序中表达思想的强大方式。[第 20 章](./Ch19_Advanced_Features.md) 包含大量有趣的高级主题,包括不安全的 Rust、宏,以及更多关于生命周期、特征、类型、函数和闭包的内容。
|
||||
[第 18 章](./Ch18_Object_Oriented_Programming_Features_of_Rust.md) 着眼于 Rust 习语如何与咱们可能熟悉的面向对象编程原则进行比较。[第 19 章](./Ch18_Patterns_and_Matching.md) 是关于模式和模式匹配的参考,他们是在整个 Rust 程序中表达思想的强大方式。[第 20 章](./Ch19_Advanced_Features.md) 包含大量有趣的高级主题,包括不安全的 Rust、宏,以及更多关于生命周期、特征、类型、函数和闭包的内容。
|
||||
|
||||
在 [第 21 章](./Ch20_Final_Project_Building_a_Multithreaded_Web_Server.md),咱们将完成其中实现了底层线程化 web 服务器的一个项目!
|
||||
|
||||
|
||||
@@ -16,6 +16,6 @@ Rust 社区成员 Andrew Gallant 已经创建了个特性完整、速度非常
|
||||
- 在适当情况下使用特质和生命周期([第 10 章](./Ch10_Generic_Types_Traits_and_Lifetimes.md))
|
||||
- 编写测试([第 11 章](./Ch11_Writing_Automated_Tests.md))
|
||||
|
||||
我们还将简要介绍闭包、迭代器与特质对象等,[第 13 章](./Ch13_Functional_Language_Features_Iterators_and_Closures.md) 与 [第 18 章](./Ch17_Object_Oriented_Programming_Features_of_Rust.md) 将详细介绍他们。
|
||||
我们还将简要介绍闭包、迭代器与特质对象等,[第 13 章](./Ch13_Functional_Language_Features_Iterators_and_Closures.md) 与 [第 18 章](./Ch18_Object_Oriented_Programming_Features_of_Rust.md) 将详细介绍他们。
|
||||
|
||||
|
||||
|
||||
@@ -152,7 +152,7 @@ pub trait Future {
|
||||
- 或者封装了到该类型的引用的 `Pin`。
|
||||
|
||||
|
||||
我们将在 [第 18 章](../Ch17_Object_Oriented_Programming_Features_of_Rust.md) 中看到有关这一语法的更多内容。目前只需知道,当我们打算轮询某个未来值,来检查他处于 `Pending` 还是 `Ready(Output)` 状态时,就需要一个由 `Pin` 封装的指向该类型的可变引用。
|
||||
我们将在 [第 18 章](../Ch18_Object_Oriented_Programming_Features_of_Rust.md) 中看到有关这一语法的更多内容。目前只需知道,当我们打算轮询某个未来值,来检查他处于 `Pending` 还是 `Ready(Output)` 状态时,就需要一个由 `Pin` 封装的指向该类型的可变引用。
|
||||
|
||||
`Pin` 是针对 `&`、`&mut`、`Box` 和 `Rc` 等类指针类型的封装器。(从技术上讲,`Pin` 适用于实现 `Deref` 或 `DerefMut` 特质的类型,但这实际上相当于仅适用于引用和灵巧指针。)`Pin` 本身并非指针,也不具备 `Rc` 和 `Arc` 那样带有引用计数的自身行为;他纯粹是编译器用来强制执行指针使用约束的工具。
|
||||
|
||||
|
||||
@@ -338,7 +338,7 @@ fn run(config: Config) -> Result<(), Box<dyn Error>>{
|
||||
|
||||
我们在这里做出了三处显著修改。首先,我们修改 `run` 函数的返回类型为 `Result<(), Box<dyn Error>>`。这个函数之前返回单元值类型,`()`,我们保留其为 `Ok` 情形下返回的值。
|
||||
|
||||
对于错误类型,我们使用了特质对象 `Box<dyn Error>` (并且我们以顶部的 `use` 语句带入了 `std::error::Error` 到作用域)。我们将在 [第 18 章](../Ch17_Object_Oriented_Programming_Features_of_Rust.md) 中介绍特质对象。目前,只需知道 `Box<(), Error>` 表示该函数将返回一个实现 `Error` 特质的类型,但我们不必指定返回值将是何特定类型。这赋予了我们在不同的错误情形下,返回可能为不同类型的错误值的灵活性。`dyn` 关键字是 *dynamic* 的缩写。
|
||||
对于错误类型,我们使用了特质对象 `Box<dyn Error>` (并且我们以顶部的 `use` 语句带入了 `std::error::Error` 到作用域)。我们将在 [第 18 章](../Ch18_Object_Oriented_Programming_Features_of_Rust.md) 中介绍特质对象。目前,只需知道 `Box<(), Error>` 表示该函数将返回一个实现 `Error` 特质的类型,但我们不必指定返回值将是何特定类型。这赋予了我们在不同的错误情形下,返回可能为不同类型的错误值的灵活性。`dyn` 关键字是 *dynamic* 的缩写。
|
||||
|
||||
其次,正如我们在 [第 9 章](../error_handling/result.md#-操作符快捷方式) 中讨论的那样,我们移除了对 `expect` 的调用,转而使用 `?` 运算符。与错误上的 `panic!` 不同,`?` 将返回当前函数中的错误值供调用者处理。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user