mirror of
https://github.com/KaiserY/trpl-zh-cn
synced 2024-11-09 00:43:59 +08:00
fix mistakes
This commit is contained in:
commit
6a4cf61fab
@ -31,7 +31,11 @@ Cargo 创建了一个空的测试来帮助我们开始库项目,不像使用 `
|
|||||||
|
|
||||||
因为没有 *src/main.rs* 文件,所以没有可供 Cargo 的 `cargo run` 执行的东西。因此,我们将使用 `cargo build` 命令只是编译库 crate 的代码。
|
因为没有 *src/main.rs* 文件,所以没有可供 Cargo 的 `cargo run` 执行的东西。因此,我们将使用 `cargo build` 命令只是编译库 crate 的代码。
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
我们将学习根据编写代码的意图来选择不同的库项目代码组织来适应多种场景。
|
我们将学习根据编写代码的意图来选择不同的库项目代码组织来适应多种场景。
|
||||||
|
=======
|
||||||
|
我们将学习根据编写代码的意图来以不同方法组织库项目代码以适应多种情况。
|
||||||
|
>>>>>>> 828c1412827d09b3a539566ec64e2560fd5fd22d
|
||||||
|
|
||||||
### 模块定义
|
### 模块定义
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ v.push(8);
|
|||||||
} // <- v goes out of scope and is freed here
|
} // <- v goes out of scope and is freed here
|
||||||
```
|
```
|
||||||
|
|
||||||
当 vector 被丢弃时,所有其内容也会被丢弃,这意味着这里它包含的整数将被清理。这可能看起来非常直观,不过一旦开始使用 vector 元素的引用情况就变得有些复杂了。下面让我们处理这种情况!
|
当 vector 被丢弃时,所有其内容也会被丢弃,这意味着这里它包含的整数将被清理。这可能看起来非常直观,不过一旦开始使用 vector 元素的引用,情况就变得有些复杂了。下面让我们处理这种情况!
|
||||||
|
|
||||||
### 读取 vector 的元素
|
### 读取 vector 的元素
|
||||||
|
|
||||||
@ -109,7 +109,7 @@ immutable
|
|||||||
| - immutable borrow ends here
|
| - immutable borrow ends here
|
||||||
```
|
```
|
||||||
|
|
||||||
这些代码看起来应该能够运行:为什么第一个元素的引用会关心 vector 结尾的变化?不能这么做的原因是由于 vector 的工作方式。在 vector 的结尾增加新元素是,在没有足够空间将所有所有元素依次相邻存放的情况下,可能会要求分配新内存并将老的元素拷贝到新的空间中。这时,第一个元素的引用就指向了被释放的内存。借用规则阻止程序陷入这种状况。
|
这些代码看起来应该能够运行:为什么第一个元素的引用会关心 vector 结尾的变化?不能这么做的原因是由于 vector 的工作方式。在 vector 的结尾增加新元素时,在没有足够空间将所有所有元素依次相邻存放的情况下,可能会要求分配新内存并将老的元素拷贝到新的空间中。这时,第一个元素的引用就指向了被释放的内存。借用规则阻止程序陷入这种状况。
|
||||||
|
|
||||||
> 注意:关于更多内容,查看 Nomicon *https://doc.rust-lang.org/stable/nomicon/vec.html*
|
> 注意:关于更多内容,查看 Nomicon *https://doc.rust-lang.org/stable/nomicon/vec.html*
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ let mut s = String::from("foo");
|
|||||||
s.push_str("bar");
|
s.push_str("bar");
|
||||||
```
|
```
|
||||||
|
|
||||||
执行这两行代码之后 `s` 将会包含 “foobar”。`push_str` 方法获取字符串 slice,因为并不需要获取参数的所有权。例如,如果将 `s2` 的内容附加到 `s1` 中后自身不能被使用就糟糕了:
|
执行这两行代码之后 `s` 将会包含 “foobar”。`push_str` 方法获取字符串 slice,因为我们并不需要获取参数的所有权。例如,如果将 `s2` 的内容附加到 `s1` 中后自身不能被使用就糟糕了:
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
let mut s1 = String::from("foo");
|
let mut s1 = String::from("foo");
|
||||||
|
@ -4,7 +4,11 @@
|
|||||||
> <br>
|
> <br>
|
||||||
> commit 4f2dc564851dc04b271a2260c834643dfd86c724
|
> commit 4f2dc564851dc04b271a2260c834643dfd86c724
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
Rust 对可靠性的执着也扩展到了错误处理。错误对于软件来说是不可避免的,所以 Rust 有很多功能来处理出现错误的情况。在很多情况下,Rust 要求你承认出错的可能性并在编译代码之前就采取行动。通过确保不会只有在将代码部署到生产环境之后才会发现错误来使得程序更可靠。
|
Rust 对可靠性的执着也扩展到了错误处理。错误对于软件来说是不可避免的,所以 Rust 有很多功能来处理出现错误的情况。在很多情况下,Rust 要求你承认出错的可能性并在编译代码之前就采取行动。通过确保不会只有在将代码部署到生产环境之后才会发现错误来使得程序更可靠。
|
||||||
|
=======
|
||||||
|
Rust 对可靠性的执着也扩展到了错误处理。错误对于软件来说是不可避免的,所以当出现错误时, Rust 有很多特性来处理当前情况。在很多情况下,Rust 要求你承认出错的可能性并在编译代码之前就采取行动。通过确保不会只有在将代码部署到生产环境之后才会发现错误来使得程序更可靠。
|
||||||
|
>>>>>>> 828c1412827d09b3a539566ec64e2560fd5fd22d
|
||||||
|
|
||||||
Rust 将错误组合成两个主要类别:**可恢复错误**(*recoverable*)和 **不可恢复错误**(*unrecoverable*)。可恢复错误通常代表向用户报告错误和重试操作是合理的情况,比如未找到文件。不可恢复错误通常是 bug 的同义词,比如尝试访问超过数组结尾的位置。
|
Rust 将错误组合成两个主要类别:**可恢复错误**(*recoverable*)和 **不可恢复错误**(*unrecoverable*)。可恢复错误通常代表向用户报告错误和重试操作是合理的情况,比如未找到文件。不可恢复错误通常是 bug 的同义词,比如尝试访问超过数组结尾的位置。
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user