Rust errors / Patterns and matching
Rust compiler error · checked with rustc 1.99.0
Rust error E0533: expected unit struct, unit variant or constant, found associated function `Tortoise::turtle`
What it meansAn item which isn't a unit struct, a variant, nor a constant has been used as a match pattern.
What rustc prints
error[E0533]: expected unit struct, unit variant or constant, found associated function `Tortoise::turtle`
--> main.rs:10:5
|
10 | Tortoise::turtle => {} // Error!
| ^^^^^^^^^^^^^^^^ not a unit struct, unit variant or constantReal output of rustc 1.99.0 compiling the official example below (2021 edition). Your names and line numbers will differ; the first line is the part to match.
The compiler team's explanation
An item which isn't a unit struct, a variant, nor a constant has been used as a match pattern.
Erroneous code example:
struct Tortoise;
impl Tortoise {
fn turtle(&self) -> u32 { 0 }
}
match 0u32 {
Tortoise::turtle => {} // Error!
_ => {}
}
if let Tortoise::turtle = 0u32 {} // Same error!
If you want to match against a value returned by a method, you need to bind the value first:
struct Tortoise;
impl Tortoise {
fn turtle(&self) -> u32 { 0 }
}
match 0u32 {
x if x == Tortoise.turtle() => {} // Bound into `x` then we compare it!
_ => {}
}From rustc --explain E0533 (1.99.0), part of the Rust project, MIT or Apache-2.0. Official page.
Related errors
- E0004non-exhaustive patterns
- E0530match bindings cannot shadow tuple variants
- E0532expected unit struct, unit variant or constant, found tuple variant `State::Failed`
- E0638This error indicates that the struct, enum or enum variant must be matched non-exhaustively as it has been marked as `non_exhaustive`
- E0730cannot pattern-match on an array without a fixed length
Up next
Often hit nextE0004: non-exhaustive patternsA related error from the same family.Read it next →Did this answer your question?