Update all-patterns.md

pull/187/head
Jesse 3 years ago committed by GitHub
parent ad4668cb09
commit bf85b6e249
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -79,7 +79,7 @@ match x {
如果 `x` 是 1、2、3、4 或 5第一个分支就会匹配。这相比使用 `|` 运算符表达相同的意思更为方便;相比 `1..=5`,使用 `|` 则不得不指定 `1 | 2 | 3 | 4 | 5`这五个值,而使用`..=`指定序列就简短的多,比如希望匹配比如从 1 到 1000 的数字的时候!
通过序列匹配只允许用于数字或字符类型,因为编译器会在编译时检查序列是否为空字符和数字值是 Rust 仅有的可以判断范围是否为空的类型。
通过序列匹配只允许用于数字或字符类型,因为编译器会在编译时检查序列是否为空字符和数字值是 Rust 仅有的可以判断范围是否为空的类型。
如下是一个使用字符类型序列的例子:
@ -470,13 +470,13 @@ match num {
}
```
上例会打印出 `less than five: 4`。当 `num` 与模式中第一个分支匹配时,因为 `Some(4)` 可以 `Some(x)`匹配 。接着匹配守卫检查 `x` 值是否小于 `5`,因为 `4` 小于 `5`,所以第一个分支被选择。
上例会打印出 `less than five: 4`。当 `num` 与模式中第一个分支匹配时,因为 `Some(4)` 可以 `Some(x)`匹配 。接着匹配守卫检查 `x` 值是否小于 `5`,因为 `4` 小于 `5`,所以第一个分支被选择。
相反如果 `num``Some(10)`,因为 10 不小于 5 所以第一个分支的匹配守卫为假。接着 Rust 会前往第二个分支,这会匹配因为它没有匹配守卫所以会匹配任何 `Some` 成员。
因为模式中无法提供类如`if x < 5`
在之前,我们提到可以使用匹配守卫来解决模式中变量覆盖的问题,那里 `match` 表达式的模式中新建了一个变量而不是使用 `match` 之外的同名变量。内部变量覆盖了外部变量,意味着不能够使用外部变量的值,下面代码展示了如何使用匹配守卫修复这个问题。
在之前,我们提到可以使用匹配守卫来解决模式中变量覆盖的问题,那里 `match` 表达式的模式中新建了一个变量而不是使用 `match` 之外的同名变量。内部变量覆盖了外部变量,意味着此时不能够使用外部变量的值,下面代码展示了如何使用匹配守卫修复这个问题。
```rust
fn main() {

Loading…
Cancel
Save