Merge pull request #1 from KaiserY/master

update
pull/476/head
Orefa 4 years ago committed by GitHub
commit 2e38238708
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -166,7 +166,7 @@ io::stdin().read_line(&mut guess)
### 使用 `Result` 类型来处理潜在的错误
我们还没有完全分析完这行代码。虽然这是单独一行代码,但它是一个逻辑行(虽然换行了但仍是一个语句)的第一部分。第二部分是这个方法:
我们还没有完全分析完这行代码。虽然这是单独一行代码,但它是逻辑行(虽然换行了但仍是语句)的一部分。后一部分是这个方法:
```rust,ignore
.expect("Failed to read line");

@ -222,7 +222,7 @@ error[E0502]: cannot borrow `s` as mutable because it is also borrowed as immuta
#### 字符串字面值就是 slice
还记得我们讲到过字符串字面值被储存在二进制文件中吗。现在知道 slice 了,我们就可以正确的理解字符串字面值了:
还记得我们讲到过字符串字面值被储存在二进制文件中吗?现在知道 slice 了,我们就可以正确地理解字符串字面值了:
```rust
let s = "Hello, world!";

@ -16,7 +16,7 @@
测试模块的 `#[cfg(test)]` 注解告诉 Rust 只在执行 `cargo test` 时才编译和运行测试代码,而在运行 `cargo build` 时不这么做。这在只希望构建库的时候可以节省编译时间,并且因为它们并没有包含测试,所以能减少编译产生的文件的大小。与之对应的集成测试因为位于另一个文件夹,所以它们并不需要 `#[cfg(test)]` 注解。然而单元测试位于与源码相同的文件中,所以你需要使用 `#[cfg(test)]` 来指定他们不应该被包含进编译结果中。
回忆本章第一部分新建的 `adder` 项目Cargo 为我们生成了如下代码:
回忆本章第一部分新建的 `adder` 项目Cargo 为我们生成了如下代码:
<span class="filename">文件名: src/lib.rs</span>

@ -89,7 +89,7 @@ impl Config {
<span class="caption">示例 13-26以迭代器作为参数更新 `Config::new` 的签名
`env::args` 函数的标准库文档显示,它返回的迭代器的类型为 `std::env::Args`。我们已经更新了 `Config :: new` 函数的签名,因此参数 `args` 的类型为 `std::env::Args` 而不是 `[String]`。因为我们拥有 `args` 的所有权,并且将通过对其进行迭代来改变 `args` ,所以我们可以将 `mut` 关键字添加到 `args` 参数的规范中以使其可变。
`env::args` 函数的标准库文档显示,它返回的迭代器的类型为 `std::env::Args`。我们已经更新了 `Config :: new` 函数的签名,因此参数 `args` 的类型为 `std::env::Args` 而不是 `&[String]`。因为我们拥有 `args` 的所有权,并且将通过对其进行迭代来改变 `args` ,所以我们可以将 `mut` 关键字添加到 `args` 参数的规范中以使其可变。
#### 使用 `Iterator` trait 代替索引

@ -16,7 +16,7 @@ Rust 和 Cargo 有一些帮助它人更方便找到和使用你发布的包的
<span class="filename">文件名: src/lib.rs</span>
````rust,ignore
/// 将给定的数字加一
/// Adds one to the number given.
///
/// # Examples
///
@ -77,10 +77,10 @@ test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
```rust,ignore
//! # My Crate
//!
//! `my_crate` 是一个使得特定计算更方便的
//! 工具集合
//! `my_crate` is a collection of utilities to make performing certain
//! calculations more convenient.
/// 将给定的数字加一。
/// Adds one to the number given.
// --snip--
```

@ -15,7 +15,7 @@ $ mkdir add
$ cd add
```
接着在 add* 目录中,创建 *Cargo.toml* 文件。这个 *Cargo.toml* 文件配置了整个工作空间。它不会包含 `[package]` 或其他我们在 *Cargo.toml* 中见过的元信息。相反,它以 `[workspace]` 部分作为开始,并通过指定 *adder* 的路径来为工作空间增加成员,如下会加入二进制 crate
接着在 *add* 目录中,创建 *Cargo.toml* 文件。这个 *Cargo.toml* 文件配置了整个工作空间。它不会包含 `[package]` 或其他我们在 *Cargo.toml* 中见过的元信息。相反,它以 `[workspace]` 部分作为开始,并通过指定 *adder* 的路径来为工作空间增加成员,如下会加入二进制 crate
<span class="filename">文件名: Cargo.toml</span>

@ -32,7 +32,7 @@
### 解引用裸指针
回到第四章的 [“悬垂引用”][dangling-references] 部分,那里提到了编译器会确保引用总是有效的。不安全 Rust 有两个被称为 **裸指针***raw pointers*)的类似于引用的新类型。和引用一样,裸指针是可变或可变的,分别写作 `*const T``*mut T`。这里的星号不是解引用运算符;它是类型名称的一部分。在裸指针的上下文中,**不可变** 意味着指针解引用之后不能直接赋值。
回到第四章的 [“悬垂引用”][dangling-references] 部分,那里提到了编译器会确保引用总是有效的。不安全 Rust 有两个被称为 **裸指针***raw pointers*)的类似于引用的新类型。和引用一样,裸指针是可变或可变的,分别写作 `*const T``*mut T`。这里的星号不是解引用运算符;它是类型名称的一部分。在裸指针的上下文中,**不可变** 意味着指针解引用之后不能直接赋值。
与引用和智能指针的区别在于,记住裸指针

Loading…
Cancel
Save