mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-29 02:03:53 +00:00
Rollup merge of #87700 - kornelski:e530text, r=oli-obk
Expand explanation of E0530 The explanation didn't cover a puzzling case of enum variants missing fields.
This commit is contained in:
commit
4442806626
@ -1,32 +1,57 @@
|
||||
A binding shadowed something it shouldn't.
|
||||
|
||||
Erroneous code example:
|
||||
A match arm or a variable has a name that is already used by
|
||||
something else, e.g.
|
||||
|
||||
* struct name
|
||||
* enum variant
|
||||
* static
|
||||
* associated constant
|
||||
|
||||
This error may also happen when an enum variant *with fields* is used
|
||||
in a pattern, but without its fields.
|
||||
|
||||
```compile_fail
|
||||
enum Enum {
|
||||
WithField(i32)
|
||||
}
|
||||
|
||||
use Enum::*;
|
||||
match WithField(1) {
|
||||
WithField => {} // error: missing (_)
|
||||
}
|
||||
```
|
||||
|
||||
Match bindings cannot shadow statics:
|
||||
|
||||
```compile_fail,E0530
|
||||
static TEST: i32 = 0;
|
||||
|
||||
let r: (i32, i32) = (0, 0);
|
||||
let r = 123;
|
||||
match r {
|
||||
TEST => {} // error: match bindings cannot shadow statics
|
||||
TEST => {} // error: name of a static
|
||||
}
|
||||
```
|
||||
|
||||
To fix this error, just change the binding's name in order to avoid shadowing
|
||||
one of the following:
|
||||
|
||||
* struct name
|
||||
* struct/enum variant
|
||||
* static
|
||||
* const
|
||||
* associated const
|
||||
|
||||
Fixed example:
|
||||
Fixed examples:
|
||||
|
||||
```
|
||||
static TEST: i32 = 0;
|
||||
|
||||
let r: (i32, i32) = (0, 0);
|
||||
let r = 123;
|
||||
match r {
|
||||
something => {} // ok!
|
||||
some_value => {} // ok!
|
||||
}
|
||||
```
|
||||
|
||||
or
|
||||
|
||||
```
|
||||
const TEST: i32 = 0; // const, not static
|
||||
|
||||
let r = 123;
|
||||
match r {
|
||||
TEST => {} // const is ok!
|
||||
other_values => {}
|
||||
}
|
||||
```
|
||||
|
Loading…
Reference in New Issue
Block a user