File tree Expand file tree Collapse file tree 1 file changed +18
-4
lines changed Expand file tree Collapse file tree 1 file changed +18
-4
lines changed Original file line number Diff line number Diff line change @@ -41,10 +41,24 @@ Key Points:
41
41
42
42
- Match guards as a separate syntax feature are important and necessary when we
43
43
wish to concisely express more complex ideas than patterns alone would allow.
44
- - They are not the same as separate ` if ` expression inside of the match arm. An
45
- ` if ` expression inside of the branch block (after ` => ` ) happens after the
46
- match arm is selected. Failing the ` if ` condition inside of that block will
47
- result in other arms of the original ` match ` expression being considered.
44
+ - Match guards are different from ` if ` expressions after the ` => ` . An ` if `
45
+ expression is evaluated after the match arm is selected. Failing the ` if `
46
+ condition inside of that block won't result in other arms of the original
47
+ ` match ` expression being considered. In the following example, the wildcard
48
+ pattern ` _ => ` is never even attempted.
49
+
50
+ ``` rust,editable
51
+ #[rustfmt::skip]
52
+ fn main() {
53
+ let input = 'a';
54
+ match input {
55
+ key if key.is_uppercase() => println!("Uppercase"),
56
+ key => if input == 'q' { println!("Quitting") },
57
+ _ => println!("Bug: this is never printed"),
58
+ }
59
+ }
60
+ ```
61
+
48
62
- The condition defined in the guard applies to every expression in a pattern
49
63
with an ` | ` .
50
64
- Note that you can't use an existing variable as the condition in a match arm,
You can’t perform that action at this time.
0 commit comments