|
|
|
@ -97,7 +97,7 @@ Rust 知道 `'c'` 位于第一个模式的序列内,所以会打印出 `early
|
|
|
|
|
|
|
|
|
|
### 解构并分解值
|
|
|
|
|
|
|
|
|
|
也可以使用模式来解构结构体、枚举、元组和引用。
|
|
|
|
|
也可以使用模式来解构结构体、枚举、元组、数组和引用。
|
|
|
|
|
|
|
|
|
|
#### 解构结构体
|
|
|
|
|
|
|
|
|
@ -274,6 +274,37 @@ let ((feet, inches), Point {x, y}) = ((3, 10), Point { x: 3, y: -10 });
|
|
|
|
|
|
|
|
|
|
这种将复杂类型分解匹配的方式,可以让我们单独得到感兴趣的某个值。
|
|
|
|
|
|
|
|
|
|
#### 解构数组
|
|
|
|
|
|
|
|
|
|
对于数组,我们可以用类似元组的方式解构,分为两种情况:
|
|
|
|
|
|
|
|
|
|
定长数组
|
|
|
|
|
```rust
|
|
|
|
|
let arr: [u16; 2] = [114, 514];
|
|
|
|
|
let [x, y] = arr;
|
|
|
|
|
|
|
|
|
|
assert_eq!(x, 114);
|
|
|
|
|
assert_eq!(y, 514);
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
不定长数组
|
|
|
|
|
```rust
|
|
|
|
|
let arr: &[u16] = &[114, 514];
|
|
|
|
|
|
|
|
|
|
if let [x, ..] = arr {
|
|
|
|
|
assert_eq!(x, &114);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if let &[.., y] = arr {
|
|
|
|
|
assert_eq!(y, 514);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let arr: &[u16] = &[];
|
|
|
|
|
|
|
|
|
|
assert!(matches!(arr, [..]));
|
|
|
|
|
assert!(!matches!(arr, [x, ..]));
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 忽略模式中的值
|
|
|
|
|
|
|
|
|
|
有时忽略模式中的一些值是很有用的,比如在 `match` 中的最后一个分支使用 `_` 模式匹配所有剩余的值。 你也可以在另一个模式中使用 `_` 模式,使用一个以下划线开始的名称,或者使用 `..` 忽略所剩部分的值。
|
|
|
|
|