traduccion ps4 lenguaje language descargar rust

rust - ps4 - Coincidencia en una referencia a una enumeración



rust traduccion (2)

Parece que cada documento introductorio para los tipos de enumeración de Rust explica cómo hacer coincidir un objeto enum que usted posee . Pero, ¿qué ocurre si no posee el objeto enum y solo tiene una referencia con la que desea hacer coincidir? No sé cuál sería la sintaxis.

Aquí hay un código en el que intento hacer corresponder una referencia a una enumeración:

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

The Rust Playground da errores en los primeros dos casos del partido al intentar compilarlo:

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`

¿Cómo puedo cambiar ese código para que compile? Traté de agregar símbolos en muchos lugares diferentes sin suerte. ¿Es posible igualar en una referencia a una enumeración?


La forma idiomática sería

match *self { Animal::Cat(ref c) => f.write_str("c"), Animal::Dog => f.write_str("d"), }

Puede usar _ lugar de ref c para silenciar la advertencia "sin usar".


Lo descubrí gracias a los útiles mensajes del compilador:

match self { &Animal::Cat(ref c) => f.write_str("c"), &Animal::Dog => f.write_str("d"), }