From 3a95d4a55fe016d9c23984a7be34289fb3367805 Mon Sep 17 00:00:00 2001 From: tsudzuki <93422095+LaoLittle@users.noreply.github.com> Date: Wed, 30 Nov 2022 10:54:03 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=A8=E6=A8=A1=E5=BC=8F=E5=8C=B9=E9=85=8D?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=95=B0=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/basic/match-pattern/all-patterns.md | 33 ++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/basic/match-pattern/all-patterns.md b/src/basic/match-pattern/all-patterns.md index 78776cf7..7c428825 100644 --- a/src/basic/match-pattern/all-patterns.md +++ b/src/basic/match-pattern/all-patterns.md @@ -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` 中的最后一个分支使用 `_` 模式匹配所有剩余的值。 你也可以在另一个模式中使用 `_` 模式,使用一个以下划线开始的名称,或者使用 `..` 忽略所剩部分的值。