mirror of
https://github.com/KaiserY/trpl-zh-cn
synced 2025-04-27 16:48:02 +08:00
commit
2e38238708
@ -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…
Reference in New Issue
Block a user