Add long error explanation for E0573
This commit is contained in:
parent
f54911c6f2
commit
e5d566c080
1 changed files with 74 additions and 1 deletions
|
|
@ -1611,6 +1611,80 @@ fn print_on_failure(state: &State) {
|
|||
```
|
||||
"##,
|
||||
|
||||
E0573: r##"
|
||||
Something other than a type has been used when one was expected.
|
||||
|
||||
Erroneous code examples:
|
||||
|
||||
```compile_fail,E0573
|
||||
enum Dragon {
|
||||
Born,
|
||||
}
|
||||
|
||||
fn oblivion() -> Dragon::Born { // error!
|
||||
Dragon::Born
|
||||
}
|
||||
|
||||
const HOBBIT: u32 = 2;
|
||||
impl HOBBIT {} // error!
|
||||
|
||||
enum Wizard {
|
||||
Gandalf,
|
||||
Saruman,
|
||||
}
|
||||
|
||||
trait Isengard {
|
||||
fn wizard(_: Wizard::Saruman); // error!
|
||||
}
|
||||
```
|
||||
|
||||
In all these errors, a type was expected. For example, in the first error, if
|
||||
we want to return the `Born` variant from the `Dragon` enum, we must set the
|
||||
function to return the enum and not its variant:
|
||||
|
||||
```
|
||||
enum Dragon {
|
||||
Born,
|
||||
}
|
||||
|
||||
fn oblivion() -> Dragon { // ok!
|
||||
Dragon::Born
|
||||
}
|
||||
```
|
||||
|
||||
In the second error, you can't implement something on an item, only on types.
|
||||
We would need to create a new type if we wanted to do something similar:
|
||||
|
||||
```
|
||||
struct Hobbit(u32); // we create a new type
|
||||
|
||||
const HOBBIT: Hobbit = Hobbit(2);
|
||||
impl Hobbit {} // ok!
|
||||
```
|
||||
|
||||
In the third case, we tried to only expect one variant of the `Wizard` enum,
|
||||
which is not possible. To make this work, we need to using pattern matching
|
||||
over the `Wizard` enum:
|
||||
|
||||
```
|
||||
enum Wizard {
|
||||
Gandalf,
|
||||
Saruman,
|
||||
}
|
||||
|
||||
trait Isengard {
|
||||
fn wizard(w: Wizard) { // error!
|
||||
match w {
|
||||
Wizard::Saruman => {
|
||||
// do something
|
||||
}
|
||||
_ => {} // ignore everything else
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
"##,
|
||||
|
||||
E0574: r##"
|
||||
Something other than a struct, variant or union has been used when one was
|
||||
expected.
|
||||
|
|
@ -1788,7 +1862,6 @@ struct Foo<X = Box<Self>> {
|
|||
// E0427, merged into 530
|
||||
// E0467, removed
|
||||
// E0470, removed
|
||||
E0573,
|
||||
E0575,
|
||||
E0576,
|
||||
E0577,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue