From bd3703424c2102ef3bd328b6912c253c57070d00 Mon Sep 17 00:00:00 2001 From: Xuzheng77s Date: Sun, 28 Aug 2022 22:21:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E9=99=84=E5=BD=95appendix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/appendix-01-keywords.md | 10 +++++----- src/appendix-02-operators.md | 8 ++++---- src/appendix-03-derivable-traits.md | 7 ++++--- src/appendix-04-useful-development-tools.md | 14 ++++++-------- src/appendix-05-editions.md | 3 ++- src/appendix-07-nightly-rust.md | 3 ++- 6 files changed, 23 insertions(+), 22 deletions(-) diff --git a/src/appendix-01-keywords.md b/src/appendix-01-keywords.md index ef09912..039f0ac 100644 --- a/src/appendix-01-keywords.md +++ b/src/appendix-01-keywords.md @@ -2,7 +2,7 @@ > [appendix-01-keywords.md](https://github.com/rust-lang/book/blob/main/src/appendix-01-keywords.md) >
-> commit de7174e6704ee4f6c8cdaead2c5c47e593775ec5 +> commit efbafdba3618487fbc9305318fcab9775132ac15 下面的列表包含 Rust 中正在使用或者以后会用到的关键字。因此,这些关键字不能被用作标识符(除了 “[原始标识符][raw-identifiers]” 部分介绍的原始标识符),这包括函数、变量、参数、结构体字段、模块、crate、常量、宏、静态值、属性、类型、trait 或生命周期 的名字。 @@ -13,17 +13,17 @@ 如下关键字目前有对应其描述的功能。 -* `as` - 强制类型转换,消除特定包含项的 trait 的歧义,或者对 `use` 和 `extern crate` 语句中的项重命名 +* `as` - 强制类型转换,消除特定包含项的 trait 的歧义,或者对 `use` 语句中的项重命名 * `async` - 返回一个 `Future` 而不是阻塞当前线程 * `await` - 暂停执行直到 `Future` 的结果就绪 * `break` - 立刻退出循环 * `const` - 定义常量或不变裸指针(constant raw pointer) * `continue` - 继续进入下一次循环迭代 -* `crate` - 链接(link)一个外部 **crate** 或一个代表宏定义的 **crate** 的宏变量 +* `crate` - 在模块路径中,代指 crate root * `dyn` - 动态分发 trait 对象 * `else` - 作为 `if` 和 `if let` 控制流结构的 fallback * `enum` - 定义一个枚举 -* `extern` - 链接一个外部 **crate** 、函数或变量 +* `extern` - 链接一个外部函数或变量 * `false` - 布尔字面值 `false` * `fn` - 定义一个函数或 **函数指针类型** (*function pointer type*) * `for` - 遍历一个迭代器或实现一个 trait 或者指定一个更高级的生命周期 @@ -111,6 +111,6 @@ fn 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 diff --git a/src/appendix-02-operators.md b/src/appendix-02-operators.md index 7489051..2addafc 100644 --- a/src/appendix-02-operators.md +++ b/src/appendix-02-operators.md @@ -2,7 +2,7 @@ > [appendix-02-operators.md](https://github.com/rust-lang/book/blob/main/src/appendix-02-operators.md) >
-> commit f83c4d08d2bc9c1e1c33037747ffe818b397e67a +> commit 396fdb69de7fb18f24b15c7ad13491b1c1fa7231 该附录包含了 Rust 语法的词汇表,包括运算符以及其他的符号,这些符号单独出现或出现在路径、泛型、trait bounds、宏、属性、注释、元组以及大括号上下文中。 @@ -16,7 +16,7 @@ |----------|---------|-------------|---------------| | `!` | `ident!(...)`, `ident!{...}`, `ident![...]` | 宏展开 | | | `!` | `!expr` | 按位非或逻辑非 | `Not` | -| `!=` | `var != expr` | 不等比较 | `PartialEq` | +| `!=` | `expr != expr` | 不等比较 | `PartialEq` | | `%` | `expr % expr` | 算术取余 | `Rem` | | `%=` | `var %= expr` | 算术取余与赋值 | `RemAssign` | | `&` | `&expr`, `&mut expr` | 借用 | | @@ -71,7 +71,7 @@ ### 非运算符符号 -下面的列表中包含了所有和运算符不一样功能的非字符符号;也就是说,他们并不像函数调用或方法调用一样表现。 +下面的列表中包含了所有和运算符不一样功能的符号;也就是说,他们并不像函数调用或方法调用一样表现。 表 B-2 展示了以其自身出现以及出现在合法其他各个地方的符号。 @@ -83,7 +83,7 @@ | `...u8`, `...i32`, `...f64`, `...usize`, 等 | 指定类型的数值常量 | | `"..."` | 字符串常量 | | `r"..."`, `r#"..."#`, `r##"..."##`, etc. | 原始字符串字面值, 未处理的转义字符 | -| `b"..."` | 字节字符串字面值; 构造一个 `[u8]` 类型而非字符串 | +| `b"..."` | 字节字符串字面值; 构造一个字节数组类型而非字符串 | | `br"..."`, `br#"..."#`, `br##"..."##`, 等 | 原始字节字符串字面值,原始和字节字符串字面值的结合 | | `'...'` | 字符字面值 | | `b'...'` | ASCII 码字节字面值 | diff --git a/src/appendix-03-derivable-traits.md b/src/appendix-03-derivable-traits.md index c1972bb..0b9ede0 100644 --- a/src/appendix-03-derivable-traits.md +++ b/src/appendix-03-derivable-traits.md @@ -1,7 +1,8 @@ ## 附录 C:可派生的 trait -> [appendix-03-derivable-traits.md](https://github.com/rust-lang/book/blob/main/src/appendix-03-derivable-traits.md) >
-> commit bb8f6cc9ba2724e8363823bb6bf176cd33584548 +> [appendix-03-derivable-traits.md](https://github.com/rust-lang/book/blob/main/src/appendix-03-derivable-traits.md) +>
+> commit c07dddac692848ade6c2112c8e15a7087fbbec45 在本书的各个部分中,我们讨论了可应用于结构体和枚举定义的 `derive` 属性。`derive` 属性会在使用 `derive` 语法标记的类型上生成对应 trait 的默认实现的代码。 @@ -15,7 +16,7 @@ 如果你希望不同于 `derive` 属性所提供的行为,请查阅 [标准库文档](https://doc.rust-lang.org/std/index.html) 中每个 trait 的细节以了解如何手动实现它们。 -标准库中定义的其它 trait 不能通过 `derive` 在类型上实现。这些 trait 不存在有意义的默认行为,所以由你负责以合理的方式实现它们。 +这里列出的 trait 是仅有的在标准库中定义且能通过 `derive` 在类型上实现。标准库中定义的其它 trait 不能通过 `derive` 在类型上实现。这些 trait 不存在有意义的默认行为,所以由你负责以合理的方式实现它们。 一个无法被派生的 trait 的例子是为终端用户处理格式化的 `Display` 。你应该时常考虑使用合适的方法来为终端用户显示一个类型。终端用户应该看到类型的什么部分?他们会找出相关部分吗?对他们来说最相关的数据格式是什么样的?Rust 编译器没有这样的洞察力,因此无法为你提供合适的默认行为。 diff --git a/src/appendix-04-useful-development-tools.md b/src/appendix-04-useful-development-tools.md index 0335f96..68574b0 100644 --- a/src/appendix-04-useful-development-tools.md +++ b/src/appendix-04-useful-development-tools.md @@ -1,7 +1,8 @@ ## 附录 D:实用开发工具 -> [appendix-04-useful-development-tools.md](https://github.com/rust-lang/book/blob/main/src/appendix-04-useful-development-tools.md) >
-> commit d48e9884f4e5ecb112095d4e8c55ebc3bce4b009 +> [appendix-04-useful-development-tools.md](https://github.com/rust-lang/book/blob/main/src/appendix-04-useful-development-tools.md) +>
+> commit efbafdba3618487fbc9305318fcab9775132ac15 本附录,我们将讨论 Rust 项目提供的用于开发 Rust 代码的工具。 @@ -27,7 +28,7 @@ $ cargo fmt ### 通过 `rustfix` 修复代码 -如果你编写过 Rust 代码,那么你可能见过编译器警告。例如,考虑如下代码: +如果你编写过 Rust 代码,那么你可能见过那些有很明显修复方式的编译器警告。例如,考虑如下代码: 文件名: src/main.rs @@ -49,7 +50,7 @@ $ cargo build warning: unused variable: `i` --> src/main.rs:4:9 | -4 | for i in 1..100 { +4 | for i in 0..100 { | ^ help: consider using `_i` instead | = 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]。 [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-manual] 来了解更多信息。 - [rust-analyzer]: https://rust-analyzer.github.io -[rust-analyzer-manual]: https://rust-analyzer.github.io/manual.html diff --git a/src/appendix-05-editions.md b/src/appendix-05-editions.md index bf18e02..4446a70 100644 --- a/src/appendix-05-editions.md +++ b/src/appendix-05-editions.md @@ -1,6 +1,7 @@ ## 附录 E:版本 -> [appendix-05-editions.md](https://github.com/rust-lang/book/blob/main/src/appendix-05-editions.md) >
+> [appendix-05-editions.md](https://github.com/rust-lang/book/blob/main/src/appendix-05-editions.md) +>
> commit 8cf0496bb8e56b683ea3f015871c8631684decf4 早在第一章,我们见过 `cargo new` 在 *Cargo.toml* 中增加了一些有关 `edition` 的元数据。本附录将解释其意义! diff --git a/src/appendix-07-nightly-rust.md b/src/appendix-07-nightly-rust.md index 2c36c34..d69ef5f 100644 --- a/src/appendix-07-nightly-rust.md +++ b/src/appendix-07-nightly-rust.md @@ -1,6 +1,7 @@ ## 附录 G:Rust 是如何开发的与 “Nightly Rust” -> [appendix-07-nightly-rust.md](https://github.com/rust-lang/book/blob/main/src/appendix-07-nightly-rust.md) >
+> [appendix-07-nightly-rust.md](https://github.com/rust-lang/book/blob/main/src/appendix-07-nightly-rust.md) +>
> commit d44317c3122b44fb713aba66cc295dee3453b24b 本附录介绍 Rust 是如何开发的以及这如何影响作为 Rust 开发者的你。