更新附录appendix

pull/642/head
Xuzheng77s 2 years ago
parent ffb1f7b204
commit bd3703424c

@ -2,7 +2,7 @@
> [appendix-01-keywords.md](https://github.com/rust-lang/book/blob/main/src/appendix-01-keywords.md) > [appendix-01-keywords.md](https://github.com/rust-lang/book/blob/main/src/appendix-01-keywords.md)
> <br> > <br>
> commit de7174e6704ee4f6c8cdaead2c5c47e593775ec5 > commit efbafdba3618487fbc9305318fcab9775132ac15
下面的列表包含 Rust 中正在使用或者以后会用到的关键字。因此,这些关键字不能被用作标识符(除了 “[原始标识符][raw-identifiers]” 部分介绍的原始标识符这包括函数、变量、参数、结构体字段、模块、crate、常量、宏、静态值、属性、类型、trait 或生命周期 下面的列表包含 Rust 中正在使用或者以后会用到的关键字。因此,这些关键字不能被用作标识符(除了 “[原始标识符][raw-identifiers]” 部分介绍的原始标识符这包括函数、变量、参数、结构体字段、模块、crate、常量、宏、静态值、属性、类型、trait 或生命周期
的名字。 的名字。
@ -13,17 +13,17 @@
如下关键字目前有对应其描述的功能。 如下关键字目前有对应其描述的功能。
* `as` - 强制类型转换,消除特定包含项的 trait 的歧义,或者对 `use` `extern crate` 语句中的项重命名 * `as` - 强制类型转换,消除特定包含项的 trait 的歧义,或者对 `use` 语句中的项重命名
* `async` - 返回一个 `Future` 而不是阻塞当前线程 * `async` - 返回一个 `Future` 而不是阻塞当前线程
* `await` - 暂停执行直到 `Future` 的结果就绪 * `await` - 暂停执行直到 `Future` 的结果就绪
* `break` - 立刻退出循环 * `break` - 立刻退出循环
* `const` - 定义常量或不变裸指针constant raw pointer * `const` - 定义常量或不变裸指针constant raw pointer
* `continue` - 继续进入下一次循环迭代 * `continue` - 继续进入下一次循环迭代
* `crate` - 链接link一个外部 **crate** 或一个代表宏定义的 **crate** 的宏变量 * `crate` - 在模块路径中,代指 crate root
* `dyn` - 动态分发 trait 对象 * `dyn` - 动态分发 trait 对象
* `else` - 作为 `if``if let` 控制流结构的 fallback * `else` - 作为 `if``if let` 控制流结构的 fallback
* `enum` - 定义一个枚举 * `enum` - 定义一个枚举
* `extern` - 链接一个外部 **crate**函数或变量 * `extern` - 链接一个外部函数或变量
* `false` - 布尔字面值 `false` * `false` - 布尔字面值 `false`
* `fn` - 定义一个函数或 **函数指针类型** (*function pointer type*) * `fn` - 定义一个函数或 **函数指针类型** (*function pointer type*)
* `for` - 遍历一个迭代器或实现一个 trait 或者指定一个更高级的生命周期 * `for` - 遍历一个迭代器或实现一个 trait 或者指定一个更高级的生命周期
@ -111,6 +111,6 @@ fn main() {
此代码编译没有任何错误。注意 `r#` 前缀需同时用于函数名定义和 `main` 函数中的调用。 此代码编译没有任何错误。注意 `r#` 前缀需同时用于函数名定义和 `main` 函数中的调用。
原始标识符允许使用你选择的任何单词作为标识符,即使该单词恰好是保留关键字。 此外,原始标识符允许你使用以不同于你的 crate 使用的 Rust 版本编写的库。比如,`try` 在 2015 edition 中不是关键字,而在 2018 edition 则是。所以如果用 2015 edition 编写的库中带有 `try` 函数,在 2018 edition 中调用时就需要使用原始标识符语法,在这里是 `r#try`。有关版本的更多信息,请参见[附录 E][appendix-e]. 原始标识符允许使用你选择的任何单词作为标识符,即使该单词恰好是保留关键字。 这给予了我们更大的自由来选择名字,这样与其他语言交互式就不用考虑到关键字问题,在要交互的语言中这个名字不是关键字。此外,原始标识符允许你使用以不同于你的 crate 使用的 Rust 版本编写的库。比如,`try` 在 2015 edition 中不是关键字,而在 2018 edition 则是。所以如果用 2015 edition 编写的库中带有 `try` 函数,在 2018 edition 中调用时就需要使用原始标识符语法,在这里是 `r#try`。有关版本的更多信息,请参见[附录 E][appendix-e].
[appendix-e]: appendix-05-editions.html [appendix-e]: appendix-05-editions.html

@ -2,7 +2,7 @@
> [appendix-02-operators.md](https://github.com/rust-lang/book/blob/main/src/appendix-02-operators.md) > [appendix-02-operators.md](https://github.com/rust-lang/book/blob/main/src/appendix-02-operators.md)
> <br /> > <br />
> commit f83c4d08d2bc9c1e1c33037747ffe818b397e67a > commit 396fdb69de7fb18f24b15c7ad13491b1c1fa7231
该附录包含了 Rust 语法的词汇表包括运算符以及其他的符号这些符号单独出现或出现在路径、泛型、trait bounds、宏、属性、注释、元组以及大括号上下文中。 该附录包含了 Rust 语法的词汇表包括运算符以及其他的符号这些符号单独出现或出现在路径、泛型、trait bounds、宏、属性、注释、元组以及大括号上下文中。
@ -16,7 +16,7 @@
|----------|---------|-------------|---------------| |----------|---------|-------------|---------------|
| `!` | `ident!(...)`, `ident!{...}`, `ident![...]` | 宏展开 | | | `!` | `ident!(...)`, `ident!{...}`, `ident![...]` | 宏展开 | |
| `!` | `!expr` | 按位非或逻辑非 | `Not` | | `!` | `!expr` | 按位非或逻辑非 | `Not` |
| `!=` | `var != expr` | 不等比较 | `PartialEq` | | `!=` | `expr != expr` | 不等比较 | `PartialEq` |
| `%` | `expr % expr` | 算术取余 | `Rem` | | `%` | `expr % expr` | 算术取余 | `Rem` |
| `%=` | `var %= expr` | 算术取余与赋值 | `RemAssign` | | `%=` | `var %= expr` | 算术取余与赋值 | `RemAssign` |
| `&` | `&expr`, `&mut expr` | 借用 | | | `&` | `&expr`, `&mut expr` | 借用 | |
@ -71,7 +71,7 @@
### 非运算符符号 ### 非运算符符号
下面的列表中包含了所有和运算符不一样功能的非字符符号;也就是说,他们并不像函数调用或方法调用一样表现。 下面的列表中包含了所有和运算符不一样功能的符号;也就是说,他们并不像函数调用或方法调用一样表现。
表 B-2 展示了以其自身出现以及出现在合法其他各个地方的符号。 表 B-2 展示了以其自身出现以及出现在合法其他各个地方的符号。
@ -83,7 +83,7 @@
| `...u8`, `...i32`, `...f64`, `...usize`, 等 | 指定类型的数值常量 | | `...u8`, `...i32`, `...f64`, `...usize`, 等 | 指定类型的数值常量 |
| `"..."` | 字符串常量 | | `"..."` | 字符串常量 |
| `r"..."`, `r#"..."#`, `r##"..."##`, etc. | 原始字符串字面值, 未处理的转义字符 | | `r"..."`, `r#"..."#`, `r##"..."##`, etc. | 原始字符串字面值, 未处理的转义字符 |
| `b"..."` | 字节字符串字面值; 构造一个 `[u8]` 类型而非字符串 | | `b"..."` | 字节字符串字面值; 构造一个字节数组类型而非字符串 |
| `br"..."`, `br#"..."#`, `br##"..."##`, 等 | 原始字节字符串字面值,原始和字节字符串字面值的结合 | | `br"..."`, `br#"..."#`, `br##"..."##`, 等 | 原始字节字符串字面值,原始和字节字符串字面值的结合 |
| `'...'` | 字符字面值 | | `'...'` | 字符字面值 |
| `b'...'` | ASCII 码字节字面值 | | `b'...'` | ASCII 码字节字面值 |

@ -1,7 +1,8 @@
## 附录 C可派生的 trait ## 附录 C可派生的 trait
> [appendix-03-derivable-traits.md](https://github.com/rust-lang/book/blob/main/src/appendix-03-derivable-traits.md) > <br /> > [appendix-03-derivable-traits.md](https://github.com/rust-lang/book/blob/main/src/appendix-03-derivable-traits.md)
> commit bb8f6cc9ba2724e8363823bb6bf176cd33584548 > <br />
> commit c07dddac692848ade6c2112c8e15a7087fbbec45
在本书的各个部分中,我们讨论了可应用于结构体和枚举定义的 `derive` 属性。`derive` 属性会在使用 `derive` 语法标记的类型上生成对应 trait 的默认实现的代码。 在本书的各个部分中,我们讨论了可应用于结构体和枚举定义的 `derive` 属性。`derive` 属性会在使用 `derive` 语法标记的类型上生成对应 trait 的默认实现的代码。
@ -15,7 +16,7 @@
如果你希望不同于 `derive` 属性所提供的行为,请查阅 [标准库文档](https://doc.rust-lang.org/std/index.html) 中每个 trait 的细节以了解如何手动实现它们。 如果你希望不同于 `derive` 属性所提供的行为,请查阅 [标准库文档](https://doc.rust-lang.org/std/index.html) 中每个 trait 的细节以了解如何手动实现它们。
标准库中定义的其它 trait 不能通过 `derive` 在类型上实现。这些 trait 不存在有意义的默认行为,所以由你负责以合理的方式实现它们。 这里列出的 trait 是仅有的在标准库中定义且能通过 `derive` 在类型上实现。标准库中定义的其它 trait 不能通过 `derive` 在类型上实现。这些 trait 不存在有意义的默认行为,所以由你负责以合理的方式实现它们。
一个无法被派生的 trait 的例子是为终端用户处理格式化的 `Display` 。你应该时常考虑使用合适的方法来为终端用户显示一个类型。终端用户应该看到类型的什么部分他们会找出相关部分吗对他们来说最相关的数据格式是什么样的Rust 编译器没有这样的洞察力,因此无法为你提供合适的默认行为。 一个无法被派生的 trait 的例子是为终端用户处理格式化的 `Display` 。你应该时常考虑使用合适的方法来为终端用户显示一个类型。终端用户应该看到类型的什么部分他们会找出相关部分吗对他们来说最相关的数据格式是什么样的Rust 编译器没有这样的洞察力,因此无法为你提供合适的默认行为。

@ -1,7 +1,8 @@
## 附录 D实用开发工具 ## 附录 D实用开发工具
> [appendix-04-useful-development-tools.md](https://github.com/rust-lang/book/blob/main/src/appendix-04-useful-development-tools.md) > <br /> > [appendix-04-useful-development-tools.md](https://github.com/rust-lang/book/blob/main/src/appendix-04-useful-development-tools.md)
> commit d48e9884f4e5ecb112095d4e8c55ebc3bce4b009 > <br />
> commit efbafdba3618487fbc9305318fcab9775132ac15
本附录,我们将讨论 Rust 项目提供的用于开发 Rust 代码的工具。 本附录,我们将讨论 Rust 项目提供的用于开发 Rust 代码的工具。
@ -27,7 +28,7 @@ $ cargo fmt
### 通过 `rustfix` 修复代码 ### 通过 `rustfix` 修复代码
如果你编写过 Rust 代码,那么你可能见过编译器警告。例如,考虑如下代码: 如果你编写过 Rust 代码,那么你可能见过那些有很明显修复方式的编译器警告。例如,考虑如下代码:
<span class="filename">文件名: src/main.rs</span> <span class="filename">文件名: src/main.rs</span>
@ -49,7 +50,7 @@ $ cargo build
warning: unused variable: `i` warning: unused variable: `i`
--> src/main.rs:4:9 --> src/main.rs:4:9
| |
4 | for i in 1..100 { 4 | for i in 0..100 {
| ^ help: consider using `_i` instead | ^ help: consider using `_i` instead
| |
= note: #[warn(unused_variables)] on by default = note: #[warn(unused_variables)] on by default
@ -146,11 +147,8 @@ fn main() {
为了帮助 IDE 集成Rust 社区建议使用 [`rust-analyzer`][rust-analyzer]。这个工具是一组以编译器为中心的实用程序,它实现了 [Language Server Protocol][lsp](一个 IDE 与编程语言之间的通信规范)。`rust-analyzer` 可以用于不同的客户端,比如 [Visual Studio Code 的 Rust analyzer 插件][vscode]。 为了帮助 IDE 集成Rust 社区建议使用 [`rust-analyzer`][rust-analyzer]。这个工具是一组以编译器为中心的实用程序,它实现了 [Language Server Protocol][lsp](一个 IDE 与编程语言之间的通信规范)。`rust-analyzer` 可以用于不同的客户端,比如 [Visual Studio Code 的 Rust analyzer 插件][vscode]。
[lsp]: http://langserver.org/ [lsp]: http://langserver.org/
[vscode]: https://marketplace.visualstudio.com/items?itemName=matklad.rust-analyzer [vscode]: https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer
访问 `rust-analyzer` 项目的 [主页][rust-analyzer] 来了解如何安装安装它,然后为你的 IDE 安装 language server 支持。如此你的 IDE 便会获得如自动补全、跳转到定义和 inline error 之类的功能。 访问 `rust-analyzer` 项目的 [主页][rust-analyzer] 来了解如何安装安装它,然后为你的 IDE 安装 language server 支持。如此你的 IDE 便会获得如自动补全、跳转到定义和 inline error 之类的功能。
请查看 [`rust-analyzer` 的文档][rust-analyzer-manual] 来了解更多信息。
[rust-analyzer]: https://rust-analyzer.github.io [rust-analyzer]: https://rust-analyzer.github.io
[rust-analyzer-manual]: https://rust-analyzer.github.io/manual.html

@ -1,6 +1,7 @@
## 附录 E版本 ## 附录 E版本
> [appendix-05-editions.md](https://github.com/rust-lang/book/blob/main/src/appendix-05-editions.md) > <br /> > [appendix-05-editions.md](https://github.com/rust-lang/book/blob/main/src/appendix-05-editions.md)
> <br />
> commit 8cf0496bb8e56b683ea3f015871c8631684decf4 > commit 8cf0496bb8e56b683ea3f015871c8631684decf4
早在第一章,我们见过 `cargo new`*Cargo.toml* 中增加了一些有关 `edition` 的元数据。本附录将解释其意义! 早在第一章,我们见过 `cargo new`*Cargo.toml* 中增加了一些有关 `edition` 的元数据。本附录将解释其意义!

@ -1,6 +1,7 @@
## 附录 GRust 是如何开发的与 “Nightly Rust” ## 附录 GRust 是如何开发的与 “Nightly Rust”
> [appendix-07-nightly-rust.md](https://github.com/rust-lang/book/blob/main/src/appendix-07-nightly-rust.md) > <br /> > [appendix-07-nightly-rust.md](https://github.com/rust-lang/book/blob/main/src/appendix-07-nightly-rust.md)
> <br />
> commit d44317c3122b44fb713aba66cc295dee3453b24b > commit d44317c3122b44fb713aba66cc295dee3453b24b
本附录介绍 Rust 是如何开发的以及这如何影响作为 Rust 开发者的你。 本附录介绍 Rust 是如何开发的以及这如何影响作为 Rust 开发者的你。

Loading…
Cancel
Save