Si tienes algo de experiencia en Rust seguramente habrás visto que cuando quieres mostrar algún tipo de dato no «primitivo» te sale un mensaje de este tipo:
XX cannot be formatted with the default formatter
Y posiblemente habrás visto que vale con añadir:
#[derive(Debug)]
Pero hay otra solución más chula (y engorrosa) que vamos a ver aquí.
Imagina la estructura «Fraccion»:
struct Fraccion {
numerador: u32,
denominador: u32,
}
Si quieres mostrarla tendrás un error:
fn main() {
let a = Fraccion{ numerador: 1, denominador: 2};
println!("{}", b);
}
Lo dicho, puedes ir a lo cómo y añadir el #[derive(Debug)]:
#[derive(Debug)]
struct Fraccion {
numerador: u32,
denominador: u32,
}
y te lo mostrará así:
Fraccion { numerador: 1, denominador: 2 }
Pero también puedes definir cómo quieres que se muestre implementando el trait «std::Display» así:
impl fmt::Display for Fraccion {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}/{}", self.numerador, self.denominador)
}
}
No te líes mucho, basta con saber que solo tienes que cambiar dos líneas:
impl fmt::Display for Fraccion {
Aquí en lugar de «Fraccion» tendrás que poner la estructura para la que quieres definir cómo se va a mostrar.
Y luego tienes que cambiar:
write!(f, "{}/{}", self.numerador, self.denominador)
Aquí es donde sucede la «magia». La macro write!() es similar a la macro println!() y es donde defines el formato.
En mi ejemplo nos mostrará la fracción con este aspecto:
1/2
Mucho más bonito ¿no?
¿Quieres apuntarte al «Reto diario de Rust»?
Es una forma cómoda y divertida de aprender Rust. Cada día recibes en tu email un pequeño concepto de Rust y luego tendrás que contestar a una pregunta.
De esta forma, poco a poco, pero sin descanso, irás adentrándote de manera divertida y sencilla en el apasionante mucho de Rust.
Para apuntarte solo necesitas entrar en este enlace y apuntarte:
https://urlantools.urlanheat.com/newsletter/coding-crabs-es/subscribe?o=blogcrabs