Wie lautet die Syntax für einen Verweis auf eine Aufzählung?

Es scheint wie jedes Einführungsdokument für Rust'senum types erklärt wie manSpie Auf ein Aufzählungsobjekt, das Siebesitze, aber was ist, wenn Sie das enum-Objekt nicht besitzen und nur einen Verweis darauf haben, mit dem Sie übereinstimmen möchten? Ich weiß nicht, wie die Syntax lauten würde.

Hier ist ein Code, in dem ich versuche, einen Verweis auf eine Aufzählung abzugleichen:

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);
}

DasRust Spielplatz gibt Fehler in den ersten beiden Fällen der Übereinstimmung aus, wenn versucht wird, sie 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ännisches Und an vielen verschiedenen Stellen ohne Glück hinzuzufügen. Ist es überhaupt möglich, einen Verweis auf eine Aufzählung abzugleichen?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage