diff --git a/src/ch18-02-refutability.md b/src/ch18-02-refutability.md
index 0ee18dd..1cca4d8 100644
--- a/src/ch18-02-refutability.md
+++ b/src/ch18-02-refutability.md
@@ -41,7 +41,7 @@ if let Some(x) = some_option_value {
示例 18-9: 使用 `if let` 和一个带有可反驳模式的代码块来代替 `let`
-我们给了代码一个得以继续的出路!这段代码可以完美运行,当让如此意味着我们不能再使用不可反驳模式并免于收到错误。如果为 `if let` 提供了一个总是会匹配的模式,比如示例 18-10 中的 `x`,编译器会给出一个警告:
+我们给了代码一个得以继续的出路!这段代码可以完美运行,尽管这意味着我们不能再使用不可反驳模式并免于收到错误。如果为 `if let` 提供了一个总是会匹配的模式,比如示例 18-10 中的 `x`,编译器会给出一个警告:
```rust,ignore
if let x = 5 {
@@ -65,6 +65,6 @@ warning: irrefutable if-let pattern
= note: #[warn(irrefutable_let_patterns)] on by default
```
-如此,匹配分支必须使用可反驳模式,除了最后一个分支需要使用能匹配任何剩余值的不可反驳模式。允许将不可反驳模式用于只有一个分支的 `match`,不过这么做不是特别有用,并可以被更简单的 `let` 语句替代。
+基于此,`match`匹配分支必须使用可反驳模式,除了最后一个分支需要使用能匹配任何剩余值的不可反驳模式。Rust允许我们在只有一个匹配分支的`match`中使用不可反驳模式,不过这么做不是特别有用,并可以被更简单的 `let` 语句替代。
目前我们已经讨论了所有可以使用模式的地方, 以及可反驳模式与不可反驳模式的区别,下面让我们一起去把可以用来创建模式的语法过目一遍吧。
diff --git a/src/ch18-03-pattern-syntax.md b/src/ch18-03-pattern-syntax.md
index e2fc370..5153b69 100644
--- a/src/ch18-03-pattern-syntax.md
+++ b/src/ch18-03-pattern-syntax.md
@@ -4,7 +4,7 @@
>
> commit 86f0ae4831f24b3c429fa4845b900b4cad903a8b
-通过本书我们已领略过许多不同类型模式的例子。本节会统一列出所有在模式中有效的语法并且会阐述你为什么可能会希望使用其中的每一个语法。
+通过本书我们已领略过许多不同类型模式的例子。在本节中,我们收集了模式中所有有效的语法,并讨论了为什么可能要使用每个语法。
### 匹配字面值
@@ -21,7 +21,7 @@ match x {
}
```
-这段代码会打印 `one` 因为 `x` 的值是 1。这个语法用于代码得到某个具体值时进行操作。
+这段代码会打印 `one` 因为 `x` 的值是 1。如果希望代码获得特定的具体值,则该语法很有用。
### 匹配命名变量
@@ -235,7 +235,7 @@ fn main() {
对于像 `Message::Move` 这样的类结构体枚举成员,可以采用类似于匹配结构体的模式。在成员名称后,使用大括号并列出字段变量以便将其分解以供此分支的代码使用。这里使用了示例 18-13 所展示的简写。
-对于像 `Message::Write` 这样的包含一个元素,以及像 `Message::ChangeColor` 这样包含两个元素的类元组枚举成员,其模式则类似于用于解构元组的模式。模式中变量的数量必须与成员中元素的数量一致。
+对于像 `Message::Write` 这样的包含一个元素,以及像 `Message::ChangeColor` 这样包含三个元素的类元组枚举成员,其模式则类似于用于解构元组的模式。模式中变量的数量必须与成员中元素的数量一致。
#### 解构嵌套的结构体和枚举
diff --git a/src/ch19-00-advanced-features.md b/src/ch19-00-advanced-features.md
index 8153ff6..a541d3c 100644
--- a/src/ch19-00-advanced-features.md
+++ b/src/ch19-00-advanced-features.md
@@ -12,6 +12,6 @@
* 高级 trait:与 trait 相关的关联类型,默认类型参数,完全限定语法(fully qualified syntax),超(父)trait(supertraits)和 newtype 模式
* 高级类型:关于 newtype 模式的更多内容,类型别名,never 类型和动态大小类型
* 高级函数和闭包:函数指针和返回闭包
-* 宏:定义在编译时定义更多更多代码的方式
+* 宏:定义在编译时定义更多代码的方式
对所有人而言,这都是一个介绍 Rust 迷人特性的宝典!让我们翻开它吧!
diff --git a/src/ch19-01-unsafe-rust.md b/src/ch19-01-unsafe-rust.md
index b0242e5..d976535 100644
--- a/src/ch19-01-unsafe-rust.md
+++ b/src/ch19-01-unsafe-rust.md
@@ -91,7 +91,7 @@ unsafe {
### 调用不安全函数或方法
-第二类要求使用不安全块的操作是调用不安全函数。不安全函数和方法与常规函数方法十分类似,除了其开头有一个额外的 `unsafe`。`unsafe` 表明我们作为程序需要满足其要求,因为 Rust 不会保证满足这些要求。通过在 `unsafe` 块中调用不安全函数,我们表明已经阅读过此函数的文档并对其是否满足函数自身的契约负责。
+第二类要求使用不安全块的操作是调用不安全函数。不安全函数和方法与常规函数方法十分类似,除了其开头有一个额外的 `unsafe`。在此上下文中,关键字`unsafe`表示该函数具有调用时需要满足的要求,而 Rust 不会保证满足这些要求。通过在 `unsafe` 块中调用不安全函数,表明我们已经阅读过此函数的文档并对其是否满足函数自身的契约负责。
如下是一个没有做任何操作的不安全函数 `dangerous` 的例子: