Es scheint wie jedes einführende Dokument für Rust enum types erläutert, wie match auf einem Enum-Objekt, dass Sie eigene. Aber was, wenn Sie das enum-Objekt nicht besitzen und Sie nur einen Verweis darauf haben, mit dem Sie übereinstimmen wollen? Ich weiß nicht, wie die Syntax sein würde.Passend zu einem Verweis auf ein Enum
Hier ist ein Code, wo ich versuche, auf den Verweis auf einen Enum zum Spiel:
use std::fmt;
use std::io::prelude::*;
pub enum Animal {
Cat(String),
Dog,
}
impl fmt::Display for Animal {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
Animal::Cat(c) => f.write_str("c"),
Animal::Dog => f.write_str("d"),
}
}
}
fn main() {
let p: Animal = Animal::Cat("whiskers".to_owned());
println!("{}", p);
}
Die Rust Playground Fehler auf den ersten beiden Fällen des Spiels gibt, wenn man versucht, es zu kompilieren:
error[E0308]: mismatched types
--> src/main.rs:12:13
|
12 | Animal::Cat(c) => f.write_str("c"),
| ^^^^^^^^^^^^^^ expected &Animal, found enum `Animal`
|
= note: expected type `&Animal`
= note: found type `Animal`
error[E0308]: mismatched types
--> src/main.rs:13:13
|
13 | Animal::Dog => f.write_str("d"),
| ^^^^^^^^^^^ expected &Animal, found enum `Animal`
|
= note: expected type `&Animal`
= note: found type `Animal`
Wie kann ich diesen Code ändern, damit er kompiliert wird? Ich habe versucht, kaufmännische Und-Zeichen in vielen verschiedenen Orten ohne Glück hinzuzufügen. Ist es überhaupt möglich, einen Bezug zu einer Enum zu finden?
Es ist auf der [Rost Roadmap] (https://github.com/rust-lang/rust-roadmap/issues/24), um die Situation hier zu verbessern. –