diff --git a/src/ch18-03-pattern-syntax.md b/src/ch18-03-pattern-syntax.md
index ace0508..d43c822 100644
--- a/src/ch18-03-pattern-syntax.md
+++ b/src/ch18-03-pattern-syntax.md
@@ -100,7 +100,7 @@ match x {
上面的代码会打印`early ASCII letter`.
-### 解构提取值
+### 解构并提取值
模式可以用来*解构*(*destructure*)结构、枚举、元组和引用. 解构意味着把一个值分解成它的组成部分. 例18-11中的结构`Point`有两个字段`x`和`y`, 我们可以通过一个模式和`let`语句来进行提取:
@@ -400,13 +400,9 @@ println!("robot_name is: {:?}", robot_name);
例18-24: 在一个匹配分支模式里创建的变量会拥有值的所有权
-This example will fail to compile since the value inside the `Some` value in
-`robot_name` is moved within the `match` when `name` binds to that value.
+上例的代码不能编译通过, 因为`robot_name`中的值被转移到了`match`中的`Some`的值所绑定的`name`里了.
-Using `&` in a pattern matches an existing reference in the value, as we saw in
-the "Destructuring to Break Apart Values" section. If you want to create a
-reference instead in order to borrow the value in a pattern variable, use the
-`ref` keyword before the new variable, as shown in Listing 18-25:
+在模式中使用`&`会匹配已存在的引用中的值, 我们在"解构并提取值"这一节中已经见过了. 如果你想创建一个引用来借用模式中变量的值, 可以在新变量名前使用`ref`关键字, 比如例18-25:
```rust
let robot_name = Some(String::from("Bors"));
@@ -419,15 +415,11 @@ match robot_name {
println!("robot_name is: {:?}", robot_name);
```
-Listing 18-25: Creating a reference so that a pattern
-variable does not take ownership of a value
+例18-25: 创建一个引用这样模式中的变量就不会拥有值的所有权
-This example will compile because the value in the `Some` variant in
-`robot_name` is not moved into the `Some(ref name)` arm of the match; the match
-only took a reference to the data in `robot_name` rather than moving it.
+上例可以编译, 因为`robot_name`没有被转移到`Some(ref name)`匹配分支的`Some`变量中; 这个匹配分支只是持有`robot_name`中的数据, `robot_name`并没被转移.
-To create a mutable reference, use `ref mut` for the same reason as shown in
-Listing 18-26:
+如果要创建一个可变引用, 可以像例18-26那样使用`ref mut`:
```rust
let mut robot_name = Some(String::from("Bors"));
@@ -440,19 +432,13 @@ match robot_name {
println!("robot_name is: {:?}", robot_name);
```
-Listing 18-26: Creating a mutable reference to a value as
-part of a pattern using `ref mut`
+例18-26: 在模式中使用`ref mut`来创建一个值的可变引用
-This example will compile and print `robot_name is: Some("Another name")`.
-Since `name` is a mutable reference, within the match arm code, we need to
-dereference using the `*` operator in order to be able to mutate the value.
+上例可以编译并打印出`robot_name is: Some("Another name")`. 因为在匹配分支的代码中`name`是一个可变引用, 为了能够改变这个值, 我们需要用`*`操作符来对它解引用.
-### Extra Conditionals with Match Guards
+### 用了匹配守卫的额外条件
-You can introduce *match guards* as part of a match arm by specifying an
-additional `if` conditional after the pattern. The conditional can use
-variables created in the pattern. Listing 18-27 has a `match` expression with a
-match guard in the first arm:
+你可以通过在模式后面指定一个额外的`if`条件来往匹配分支中引入*匹配守卫*(*match guards*). 这个条件可以使用模式中创建的变量. 例18-27中的`match`表达式的第一个匹配分支就有一个匹配守卫:
```rust
let num = Some(4);
@@ -464,16 +450,11 @@ match num {
}
```
-Listing 18-27: Adding a match guard to a pattern
+例18-27: 往一个模式中加入匹配守卫
-This example will print `less than five: 4`. If `num` was instead `Some(7)`,
-this example would print `7`. Match guards allow you to express more complexity
-than patterns alone give you.
+上例会打印`less than five: 4`. 如果把`num`换成`Some(7)`, 上例将会打印`7`. 匹配守卫让你能表达出模式不能给予你的更多的复杂的东西.
-In Listing 18-10, we saw that since patterns shadow variables, we weren't able
-to specify a pattern to express the case when a value was equal to a variable
-outside the `match`. Listing 18-28 shows how we can use a match guard to
-accomplish this:
+在例18-10中, 我们见过了模式中的阴影变量, 当一个值等于`match`外部的变量时我们不能用模式来表达出这种情况. 例18-28演示了我们如何用一个匹配守卫来解决这个问题:
```rust
fn main() {
@@ -490,13 +471,9 @@ fn main() {
}
```
-Listing 18-28: Using a match guard to test for equality
-with an outer variable
+例18-28: 用一个匹配守卫来测试与外部变量的相等性
-This will now print `Default case, x = Some(5)`. Because the second match arm
-is not introducing a new variable `y` that shadows the outer `y` in the
-pattern, we can use `y` in the match guard. We're still destructuring `x` to
-get the inner value `n`, and then we can compare `n` and `y` in the match guard.
+上例会打印出`Default case, x = Some(5)`. 因为第二个匹配分支没有往模式中引入新变量`y`, 所以外部变量`y`就不会被遮掩, 这样我们就可以在匹配守卫中直接使用外部变量`y`. 我们还把`x`解构到了内部变量`n`中, 这样我们就可以在匹配守卫中比较`n`和`y`了.
If you're using a match guard with multiple patterns specified by `|`, the
match guard condition applies to all of the patterns. Listing 18-29 shows a