From 4c15d5121888a91441a2a2e5b51892fbad98422e Mon Sep 17 00:00:00 2001 From: "rust-lang.xfoss.com" Date: Mon, 18 Dec 2023 17:17:50 +0800 Subject: [PATCH] Refining Ch06. --- .../match_control_flow.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/enums_and_pattern_matching/match_control_flow.md b/src/enums_and_pattern_matching/match_control_flow.md index 1aa33b9..5627890 100644 --- a/src/enums_and_pattern_matching/match_control_flow.md +++ b/src/enums_and_pattern_matching/match_control_flow.md @@ -247,7 +247,8 @@ fn move_player(num_spaces: u8) {} Rust 还提供了一种,在我们需要一个全包,但又不想 *使用* 全包模式中的值时,可以使用的模式:`_` 是个特殊的模式,他可以匹配任何值,但不会与该值绑定。这会告诉 Rust,我们不打算使用该值,因此 Rust 不会警告我们,有个未使用的变量。 -下面就来将那个游戏的规则修改为,在投中骰子的三点和七点之外别的点数时,就必须再投一次骰子。那么这里就不需要用到那个点数值了,因此就可以将这里的代码修改为使用 `_` 而不是那个名为 `other` 的变量: +我们来改变一下游戏规则:现在,如果掷出的不是 3 或 7 点,就必须再掷一次。我们不再需要使用那个全包值,因此我们把咱们的代码修改为使用 `_`,代替名为 `other` 的变量: + ```rust let dice_roll = 9; @@ -263,9 +264,11 @@ Rust 还提供了一种,在我们需要一个全包,但又不想 *使用* fn reroll() {} ``` -由于这里在最后的支臂中,显式地忽略了全部其他值,因此该示例也是满足 `match` 表达式的穷尽要求的;这里并未忘记掉任何东西。 -若再一次修改此游戏的规则,修改为在抛出即非三点也非七点的其他点数时,什么也不会发生,那么就可以通过使用单元值(即在 [元组类型](Ch03_Common_Programming_Concepts.md#元组类型) 小节中讲到的那个空元组类型)作为该 `_` 支臂后的代码,来表达这样的游戏规则: +这个例子也符合穷举性要求,因为我们显式地忽略了最后一个支臂中,所有其他值;我们没有忘记任何可能性。 + +最后,我们再修改一次游戏规则,如果掷出的不是 3 或 7 点,则在咱们的回合中,不会发生任何其他事情。我们可以使用单元值(在 [元组类型](../programming_concepts/data_types.md#元组类型) 小节中曾提到过的空元组类型),作为 `_` 支臂的代码,来表达这一点: + ```rust let dice_roll = 9; @@ -280,6 +283,7 @@ fn add_fancy_hat() {} fn remove_fancy_hat() {} ``` -这里就显式地告诉 Rust,这里将不使用那些不与先前支臂匹配的全部其他值,且在此情形下这里不要运行任何代码。 -在 [第 18 章](Ch18_Patterns_and_Matching.md) 将涉及到更多有关模式与匹配的内容。而现在就要移步到 `if let` 语法,在那些使用 `match` 表达式显得多余的情形下,`if let` 语法就会有用。 +在这里,我们显式地告诉 Rust,我们不会使用,任何与先前支臂中模式不匹配的其他值,且在这种情况下,我们不打算运行任何代码。 + +我们将在 [第 18 章](../Ch18_Patterns_and_Matching.md) 中,结束更多有关模式与匹配的内容。现在,我们将继续讨论 `if let` 这种语法,其在 `match` 表达式显得有些冗长的情况下,非常有用。