Merge pull request #1212 from acehinnnqru/patch-3

patch: update all-patterns.md
pull/1226/head
Sunface 1 year ago committed by GitHub
commit a1b978a027
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -19,7 +19,7 @@ match x {
### 匹配命名变量 ### 匹配命名变量
在 [match](https://course.rs/match-if-let.html#变量覆盖) 中,我们有讲过变量覆盖的问题,这个在**匹配命名变量**时会遇到: 在 [match](https://course.rs/basic/match-pattern/match-if-let.html#%E5%8F%98%E9%87%8F%E9%81%AE%E8%94%BD) 中,我们有讲过变量遮蔽的问题,这个在**匹配命名变量**时会遇到:
```rust ```rust
fn main() { fn main() {
@ -40,11 +40,11 @@ fn main() {
第二个匹配分支中的模式引入了一个新变量 `y`,它会匹配任何 `Some` 中的值。因为这里的 `y``match` 表达式的作用域中,而不是之前 `main` 作用域中,所以这是一个新变量,不是开头声明为值 10 的那个 `y`。这个新的 `y` 绑定会匹配任何 `Some` 中的值,在这里是 `x` 中的值。因此这个 `y` 绑定了 `x``Some` 内部的值。这个值是 5所以这个分支的表达式将会执行并打印出 `Matchedy = 5` 第二个匹配分支中的模式引入了一个新变量 `y`,它会匹配任何 `Some` 中的值。因为这里的 `y``match` 表达式的作用域中,而不是之前 `main` 作用域中,所以这是一个新变量,不是开头声明为值 10 的那个 `y`。这个新的 `y` 绑定会匹配任何 `Some` 中的值,在这里是 `x` 中的值。因此这个 `y` 绑定了 `x``Some` 内部的值。这个值是 5所以这个分支的表达式将会执行并打印出 `Matchedy = 5`
如果 `x` 的值是 `None` 而不是 `Some(5)`,头两个分支的模式不会匹配,所以会匹配模式 `_`。这个分支的模式中没有引入变量 `x`,所以此时表达式中的 `x` 会是外部没有被覆盖`x`,也就是 `None` 如果 `x` 的值是 `None` 而不是 `Some(5)`,头两个分支的模式不会匹配,所以会匹配模式 `_`。这个分支的模式中没有引入变量 `x`,所以此时表达式中的 `x` 会是外部没有被遮蔽`x`,也就是 `None`
一旦 `match` 表达式执行完毕,其作用域也就结束了,同理内部 `y` 的作用域也结束了。最后的 `println!` 会打印 `at the end: x = Some(5), y = 10` 一旦 `match` 表达式执行完毕,其作用域也就结束了,同理内部 `y` 的作用域也结束了。最后的 `println!` 会打印 `at the end: x = Some(5), y = 10`
如果你不想引入变量覆盖,那么需要使用匹配守卫(match guard)的方式,稍后在[匹配守卫提供的额外条件](#匹配守卫提供的额外条件)中会讲解。 如果你不想引入变量遮蔽,可以使用另一个变量名而非 `y`,或者使用匹配守卫(match guard)的方式,稍后在[匹配守卫提供的额外条件](#匹配守卫提供的额外条件)中会讲解。
### 单分支多模式 ### 单分支多模式

Loading…
Cancel
Save