| An "or" pattern was used where the variable bindings are not consistently bound |
| across patterns. |
| |
| Erroneous code example: |
| |
| ```compile_fail,E0409 |
| let x = (0, 2); |
| match x { |
| (0, ref y) | (y, 0) => { /* use y */} // error: variable `y` is bound with |
| // different mode in pattern #2 |
| // than in pattern #1 |
| _ => () |
| } |
| ``` |
| |
| Here, `y` is bound by-value in one case and by-reference in the other. |
| |
| To fix this error, just use the same mode in both cases. |
| Generally using `ref` or `ref mut` where not already used will fix this: |
| |
| ``` |
| let x = (0, 2); |
| match x { |
| (0, ref y) | (ref y, 0) => { /* use y */} |
| _ => () |
| } |
| ``` |
| |
| Alternatively, split the pattern: |
| |
| ``` |
| let x = (0, 2); |
| match x { |
| (y, 0) => { /* use y */ } |
| (0, ref y) => { /* use y */} |
| _ => () |
| } |
| ``` |