Update links

This commit is contained in:
Aaran Xu 2022-01-22 02:27:42 +08:00
parent d9110b9ef9
commit e4a8f5bda5
10 changed files with 19 additions and 19 deletions

View File

@ -10,7 +10,7 @@
- 是否允许实现该 trait 的条件
- 需要 trait 操作的例子
如果你希望不同于 `derive` 属性所提供的行为,请查阅 [标准库文档](https://doc.rust-lang.org/std/index.html) 中每个 trait 的细节以了解如何手动实现它们。
如果你希望不同于 `derive` 属性所提供的行为,请查阅 [标准库文档](https://rustwiki.org/zh-CN/std/index.html) 中每个 trait 的细节以了解如何手动实现它们。
标准库中定义的其它 trait 不能通过 `derive` 在类型上实现。这些 trait 不存在有意义的默认行为,所以由你负责以合理的方式实现它们。

View File

@ -63,7 +63,7 @@ $ cd guessing_game
默认情况下Rust 将 [*prelude*][prelude]<!-- ignore --> 模块中少量的类型引入到每个程序的作用域中。如果需要的类型不在 prelude 中,你必须使用 `use` 语句显式地将其引入作用域。`std::io` 库提供很多有用的功能,包括接收用户输入的功能。
[prelude]: https://doc.rust-lang.org/std/prelude/index.html
[prelude]: https://rustwiki.org/zh-CN/std/prelude/index.html
如第 1 章所提及,`main` 函数是程序的入口点:
@ -106,7 +106,7 @@ let mut bar = 5; // 可变
让我们回到猜数字程序中。现在我们知道了 `let mut guess` 会引入一个叫做 `guess` 的可变变量。等号(`=`)的右边是 `guess` 所绑定的值,它是 `String::new` 的结果,这个函数会返回一个 `String` 的新实例。[`String`][string]<!-- ignore --> 是一个标准库提供的字符串类型,它是 UTF-8 编码的可增长文本块。
[string]: https://doc.rust-lang.org/std/string/struct.String.html
[string]: https://rustwiki.org/zh-CN/std/string/struct.String.html
`::new` 那一行的 `::` 语法表明 `new``String` 类型的一个 **关联函数***associated function*)。关联函数是针对类型实现的,在这个例子中是 `String`,而不是 `String` 的某个特定实例。一些语言中把它称为 **静态方法***static method*)。
@ -122,11 +122,11 @@ let mut bar = 5; // 可变
如果程序的开头没有 `use std::io` 这一行,可以把函数调用写成 `std::io::stdin`。`stdin` 函数返回一个 [`std::io::Stdin`][iostdin]<!-- ignore --> 的实例,这代表终端标准输入句柄的类型。
[iostdin]: https://doc.rust-lang.org/std/io/struct.Stdin.html
[iostdin]: https://rustwiki.org/zh-CN/std/io/struct.Stdin.html
代码的下一部分,`.read_line(&mut guess)`,调用 [`read_line`][read_line]<!-- ignore --> 方法从标准输入句柄获取用户输入。我们还向 `read_line()` 传递了一个参数:`&mut guess`。
[read_line]: https://doc.rust-lang.org/std/io/struct.Stdin.html#method.read_line
[read_line]: https://rustwiki.org/zh-CN/std/io/struct.Stdin.html#method.read_line
`read_line` 的工作是,无论用户在标准输入中键入什么内容,都将其存入一个字符串中,因此它需要字符串作为参数。这个字符串参数应该是可变的,以便 `read_line` 将用户输入附加上去。
@ -150,8 +150,8 @@ io::stdin().read_line(&mut guess).expect("Failed to read line");
之前提到了 `read_line` 将用户输入附加到传递给它的字符串中,不过它也返回一个值——在这个例子中是 [`io::Result`][ioresult]<!-- ignore -->。Rust 标准库中有很多叫做 `Result` 的类型:一个通用的 [`Result`][result]<!-- ignore --> 以及在子模块中的特化版本,比如 `io::Result`
[ioresult]: https://doc.rust-lang.org/std/io/type.Result.html
[result]: https://doc.rust-lang.org/std/result/enum.Result.html
[ioresult]: https://rustwiki.org/zh-CN/std/io/type.Result.html
[result]: https://rustwiki.org/zh-CN/std/result/enum.Result.html
`Result` 类型是 [*枚举**enumeration*][enums]<!-- ignore -->,通常也写作 *enums*。枚举类型持有固定集合的值,这些值被称为枚举的 **成员***variants*)。第 6 章将介绍枚举的更多细节。
@ -161,7 +161,7 @@ io::stdin().read_line(&mut guess).expect("Failed to read line");
这些 `Result` 类型的作用是编码错误处理信息。`Result` 类型的值,像其他类型一样,拥有定义于其上的方法。`io::Result` 的实例拥有 [`expect` 方法][expect]<!-- ignore -->。如果 `io::Result` 实例的值是 `Err``expect` 会导致程序崩溃,并显示当做参数传递给 `expect` 的信息。如果 `read_line` 方法返回 `Err`,则可能是来源于底层操作系统错误的结果。如果 `io::Result` 实例的值是 `Ok``expect` 会获取 `Ok` 中的值并原样返回。在本例中,这个值是用户输入到标准输入中的字节数。
[expect]: https://doc.rust-lang.org/std/result/enum.Result.html#method.expect
[expect]: https://rustwiki.org/zh-CN/std/result/enum.Result.html#method.expect
如果不调用 `expect`,程序也能编译,不过会出现一个警告:
@ -443,7 +443,7 @@ class="keystroke">enter</span>产生回车和换行符 `\r\n`)。`trim` 方法
[字符串的 `parse` 方法][parse]<!-- ignore --> 将字符串解析成数字。因为这个方法可以解析多种数字类型,因此需要告诉 Rust 具体的数字类型,这里通过 `let guess: u32` 指定。`guess` 后面的冒号(`:`)告诉 Rust 我们指定了变量的类型。Rust 有一些内建的数字类型;`u32` 是一个无符号的 32 位整型。对于不大的正整数来说,它是不错的类型,第 3 章还会讲到其他数字类型。另外,程序中的 `u32` 注解以及与 `secret_number` 的比较,意味着 Rust 会推断出 `secret_number` 也是 `u32` 类型。现在可以使用相同类型比较两个值了!
[parse]: https://doc.rust-lang.org/std/primitive.str.html#method.parse
[parse]: https://rustwiki.org/zh-CN/std/primitive.str.html#method.parse
`parse` 调用很容易产生错误。例如,字符串中包含 `A👍%`,就无法将其转换为一个数字。因此,`parse` 方法返回一个 `Result` 类型。像之前 [“使用 `Result` 类型来处理潜在的错误”][handling-potential-failure-with-the-result-type]<!-- ignore
-->) 讨论的 `read_line` 方法那样,再次按部就班地用 `expect` 方法处理即可。如果 `parse` 不能从字符串生成一个数字,返回一个 `Result``Err` 成员时,`expect` 会使游戏崩溃并打印附带的信息。如果 `parse` 成功地将字符串转换为一个数字,它会返回 `Result``Ok` 成员,然后 `expect` 会返回 `Ok` 值中的数字。

View File

@ -112,7 +112,7 @@ let loopback = IpAddr::V6(String::from("::1"));
这些代码展示了使用枚举来存储两种不同 IP 地址的几种可能的选择。然而,事实证明存储和编码 IP 地址实在是太常见了[以致标准库提供了一个开箱即用的定义!][IpAddr]<!-- ignore -->让我们看看标准库是如何定义 `IpAddr` 的:它正有着跟我们定义和使用的一样的枚举和成员,不过它将成员中的地址数据嵌入到了两个不同形式的结构体中,它们对不同的成员的定义是不同的:
[IpAddr]: https://doc.rust-lang.org/std/net/enum.IpAddr.html
[IpAddr]: https://rustwiki.org/zh-CN/std/net/enum.IpAddr.html
```rust
struct Ipv4Addr {
@ -207,7 +207,7 @@ Tony Hoarenull 的发明者,在他 2009 年的演讲 “Null References: Th
问题不在于概念而在于具体的实现。为此Rust 并没有空值,不过它确实拥有一个可以编码存在或不存在概念的枚举。这个枚举是 `Option<T>`,而且它[定义于标准库中][option]<!-- ignore -->,如下:
[option]: https://doc.rust-lang.org/std/option/enum.Option.html
[option]: https://rustwiki.org/zh-CN/std/option/enum.Option.html
```rust
enum Option<T> {
@ -260,6 +260,6 @@ not satisfied
那么当有一个 `Option<T>` 的值时,如何从 `Some` 成员中取出 `T` 的值来使用它呢?`Option<T>` 枚举拥有大量用于各种情况的方法:你可以查看[它的文档][docs]<!-- ignore -->。熟悉 `Option<T>` 的方法将对你的 Rust 之旅非常有用。
[docs]: https://doc.rust-lang.org/std/option/enum.Option.html
[docs]: https://rustwiki.org/zh-CN/std/option/enum.Option.html
总的来说,为了使用 `Option<T>` 值,需要编写处理每个成员的代码。你想要一些代码只当拥有 `Some(T)` 值时运行,允许这些代码使用其中的 `T`。也希望一些代码在值为 `None` 时运行,这些代码并没有一个可用的 `T` 值。`match` 表达式就是这么一个处理枚举的控制流结构:它会根据枚举的成员运行不同的代码,这些代码可以使用匹配到的值中的数据。

View File

@ -264,7 +264,7 @@ use std::collections::*;
这个 `use` 语句将 `std::collections` 中定义的所有公有项引入当前作用域。使用 glob 运算符时请多加小心Glob 会使得我们难以推导作用域中有什么名称和它们是在何处定义的。
glob 运算符经常用于测试模块 `tests` 中,这时会将所有内容引入作用域;我们将在第 11 章 [“如何编写测试”][writing-tests]<!-- ignore --> 部分讲解。glob 运算符有时也用于 prelude 模式;查看 [标准库中的文档](https://doc.rust-lang.org/std/prelude/index.html#other-preludes) 了解这个模式的更多细节。
glob 运算符经常用于测试模块 `tests` 中,这时会将所有内容引入作用域;我们将在第 11 章 [“如何编写测试”][writing-tests]<!-- ignore --> 部分讲解。glob 运算符有时也用于 prelude 模式;查看 [标准库中的文档](https://rustwiki.org/zh-CN/std/prelude/index.html#other-preludes) 了解这个模式的更多细节。
[rand]: ch02-00-guessing-game-tutorial.html#生成一个随机数
[writing-tests]: ch11-01-writing-tests.html#如何编写测试

View File

@ -8,6 +8,6 @@ Rust 标准库中包含一系列被称为 **集合***collections*)的非常
对于标准库提供的其他类型的集合,请查看[文档][collections]。
[collections]: https://doc.rust-lang.org/std/collections
[collections]: https://rustwiki.org/zh-CN/std/collections
我们将讨论如何创建和更新 vector、字符串和哈希 map以及它们有什么特别之处。

View File

@ -29,7 +29,7 @@ fn main() {
<span class="caption">示例 9-3打开文件</span>
如何知道 `File::open` 返回一个 `Result` 呢?我们可以查看 [标准库 API 文档](https://doc.rust-lang.org/std/index.html)<!-- ignore -->,或者可以直接问编译器!如果给 `f` 某个我们知道 **不是** 函数返回值类型的类型注解,接着尝试编译代码,编译器会告诉我们类型不匹配。然后错误信息会告诉我们 `f` 的类型 **应该** 是什么。让我们试试!我们知道 `File::open` 的返回值不是 `u32` 类型的,所以将 `let f` 语句改为如下:
如何知道 `File::open` 返回一个 `Result` 呢?我们可以查看 [标准库 API 文档](https://rustwiki.org/zh-CN/std/index.html)<!-- ignore -->,或者可以直接问编译器!如果给 `f` 某个我们知道 **不是** 函数返回值类型的类型注解,接着尝试编译代码,编译器会告诉我们类型不匹配。然后错误信息会告诉我们 `f` 的类型 **应该** 是什么。让我们试试!我们知道 `File::open` 的返回值不是 `u32` 类型的,所以将 `let f` 语句改为如下:
```rust,ignore,does_not_compile
let f: u32 = File::open("hello.txt");

View File

@ -8,4 +8,4 @@
* 从 [crates.io](https://crates.io) 安装二进制文件
* 使用自定义的命令来扩展 Cargo
Cargo 的功能不止本章所介绍的,关于其全部功能的详尽解释,请查看 [文档](http://doc.rust-lang.org/cargo/)
Cargo 的功能不止本章所介绍的,关于其全部功能的详尽解释,请查看 [文档](http://rustwiki.org/zh-CN/cargo/)

View File

@ -40,4 +40,4 @@ opt-level = 1
这会覆盖默认的设置 `0`。现在运行 `cargo build`Cargo 将会使用 `dev` 的默认配置加上定制的 `opt-level`。因为 `opt-level` 设置为 `1`Cargo 会比默认进行更多的优化,但是没有发布构建那么多。
对于每个配置的设置和其默认值的完整列表,请查看 [Cargo 的文档](https://doc.rust-lang.org/cargo/reference/manifest.html#the-profile-sections)
对于每个配置的设置和其默认值的完整列表,请查看 [Cargo 的文档](https://rustwiki.org/zh-CN/cargo/reference/manifest.html#the-profile-sections)

View File

@ -285,7 +285,7 @@ license = "MIT OR Apache-2.0"
[dependencies]
```
[Cargo 的文档](http://doc.rust-lang.org/cargo/) 描述了其他可以指定的元信息,他们可以帮助你的 crate 更容易被发现和使用!
[Cargo 的文档](http://rustwiki.org/zh-CN/cargo/) 描述了其他可以指定的元信息,他们可以帮助你的 crate 更容易被发现和使用!
### 发布到 Crates.io

View File

@ -64,7 +64,7 @@ macro_rules! vec {
宏定义中有效模式语法和在第 18 章提及的模式语法是不同的,因为宏模式所匹配的是 Rust 代码结构而不是值。回过头来检查下示例 19-28 中模式片段什么意思。对于全部的宏模式语法,请查阅[参考]。
[参考]: https://doc.rust-lang.org/reference/macros.html
[参考]: https://rustwiki.org/zh-CN/reference/macros.html
首先,一对括号包含了整个模式。接下来是美元符号( `$` ),后跟一对括号,捕获了符合括号内模式的值以用于替换后的代码。`$()` 内则是 `$x:expr` ,其匹配 Rust 的任意表达式,并将该表达式记作 `$x`