Was ist die syntax für den Abgleich mit einem Verweis auf ein enum?

Es scheint, wie jedes einführende Dokument für Rost ist enum-Typen erklärt, wie match auf ein enum-Objekt, das Sie eigenen, aber was ist, wenn Sie nicht selbst das enum-Objekt, und Sie müssen nur einen Verweis darauf, dass Sie möchten, um dagegen? Ich weiß nicht, was wäre die syntax.

Hier ist ein code, wo ich versuche, die Partie auf einen Verweis auf eine enum:

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

Den Rost Spielplatz gibt Fehler, die sich auf die beiden ersten Fälle des Spiels, wenn Sie versuchen, um 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 das ändern, dass der code, um es zu kompilieren? Ich habe versucht, das hinzufügen kaufmännische und-Zeichen in vielen verschiedenen Orten, ohne Glück. Ist es sogar möglich, ein match auf einen Verweis auf ein enum?

Schreibe einen Kommentar