From a0b08f387b5f383fb4a135a4cd68f0d3842743d2 Mon Sep 17 00:00:00 2001 From: Steve Klabnik Date: Tue, 9 Jun 2015 14:32:10 -0400 Subject: [PATCH] Explain interaction with if and | in patterns Fixes #26012 --- src/doc/trpl/patterns.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/doc/trpl/patterns.md b/src/doc/trpl/patterns.md index 93df0f19e8ee..0f356d75abc8 100644 --- a/src/doc/trpl/patterns.md +++ b/src/doc/trpl/patterns.md @@ -154,6 +154,31 @@ match x { This prints `Got an int!`. +If you’re using `if` with multiple patterns, the `if` applies to both sides: + +```rust +let x = 4; +let y = false; + +match x { + 4 | 5 if y => println!("yes"), + _ => println!("no"), +} +``` + +This prints `no`, because the `if` applies to the whole of `4 | 5`, and not to +just the `5`, In other words, the the precedence of `if` behaves like this: + +```text +(4 | 5) if y => ... +``` + +not this: + +```text +4 | (5 if y) => ... +``` + # ref and ref mut If you want to get a [reference][ref], use the `ref` keyword: