Podczas korzystania z instrukcji match
napotkałem bardzo mylący komunikat o błędzie z kompilatora Rust.Mylące nieosiągalny błąd wzorca
enum Name {
Known,
}
fn unreachable_pattern(n: Name) -> usize {
use Name::*;
match n {
Unknown => 1,
Known => 1,
}
}
Rust kompilator narzeka nieosiągalnego wzoru:
error[E0001]: unreachable pattern
--> src/main.rs:10:9
|
10 | Known => 1,
| ^^^^^ this is an unreachable pattern
|
note: this pattern matches any value
--> src/main.rs:9:9
|
9 | Unknown => 1,
| ^^^^^^^
Do ludzka, prawdziwy błąd to, że Unknown
brakuje definicji Name
, który jest łatwiejszy do wykrycia kiedy nie masz jeszcze 40 innych wariantów.
Nie rozumiem, dlaczego "i" jest niezastąpionym odpowiednikiem? Co jest niepodważalne w tej kwestii? –
@MikeVella: Niezastąpiony oznacza, że zawsze pasuje. A ponieważ 'i' nie jest wzorcem (tylko wiązaniem), to niezależnie od wewnętrznej struktury/wartości dopasowywanej zmiennej, zawsze będzie można powiązać ją z' i'. –