Wygląda na to, że każdy dokument wprowadzający do Rusta enum types wyjaśnia, jak match na obiekcie wyliczeniowym, który jest właścicielem. Ale co, jeśli nie jesteś właścicielem obiektu enum i po prostu masz do niego odniesienie, z którym chcesz się dopasować? Nie wiem, jaka byłaby składnia.Dopasowanie w odniesieniu do enum
Oto kod, gdzie staram się dopasować w odniesieniu do wyliczenia:
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);
}
Rust Playground daje błędy w dwóch pierwszych przypadkach meczu, gdy próbuje go skompilować:
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`
Jak mogę zmienić ten kod, aby go skompilować? Próbowałem dodawać wzmacniacze w wielu różnych miejscach bez żadnego szczęścia. Czy można nawet dopasować odniesienie do wyliczenia?
Jest na [mapie drogowej Rust] (https://github.com/rust-lang/rust-roadmap/issues/24) w celu poprawy sytuacji tutaj. –