This commit is contained in:
2021-07-17 14:25:09 -05:00
parent f4ba7515b3
commit 97491bfb1a

View File

@@ -1,3 +1,49 @@
use std::fmt;
// use the automated debug as below
//#[derive(fmt::Debug)]
struct Vector2D {
x: isize,
y: isize,
}
// Or write your own
impl fmt::Debug for Vector2D {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
// The `f` value implements the `Write` trait, which is what the
// write! macro is expecting. Note that this formatting ignores the
// various flags provided to format strings.
write!(f, "My Vector2D debug({}, {})", self.x, self.y)
}
}
// display cannot be automatically generated
impl fmt::Display for Vector2D {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
// The `f` value implements the `Write` trait, which is what the
// write! macro is expecting. Note that this formatting ignores the
// various flags provided to format strings.
write!(f, "({}, {})", self.x, self.y)
}
}
// Different traits allow different forms of output of a type. The meaning
// of this format is to print the magnitude of a vector.
impl fmt::Binary for Vector2D {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let magnitude: f64 = (self.x * self.x + self.y * self.y) as f64;
let magnitude = magnitude.sqrt();
// Respect the formatting flags by using the helper method
// `pad_integral` on the Formatter object. See the method
// documentation for details, and the function `pad` can be used
// to pad strings.
let decimals = f.precision().unwrap_or(3);
let string = format!("{:.*}", decimals, magnitude);
f.pad_integral(true, "", &string)
}
}
fn main() { fn main() {
// In general, the `{}` will be automatically replaced with any // In general, the `{}` will be automatically replaced with any
// arguments. These will be stringified. // arguments. These will be stringified.
@@ -46,4 +92,10 @@ fn main() {
// handling. This will not work. // handling. This will not work.
//println!("This struct `{}` won't print...", Structure(3)); //println!("This struct `{}` won't print...", Structure(3));
// FIXME ^ Comment out this line. // FIXME ^ Comment out this line.
let myvector = Vector2D { x: 3, y: 4 };
println!("{}", myvector); // => "(3, 4)"
println!("{:?}", myvector); // => "Vector2D {x: 3, y:4}"
println!("{:10.3b}", myvector); // => " 5.000"
} }