From 54b680069c4652d2b67229df26b20d8b751693ff Mon Sep 17 00:00:00 2001 From: Mattrixwv Date: Wed, 10 Jun 2020 00:57:43 -0400 Subject: [PATCH] Added program to teach writing display functions --- display.rs | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 display.rs diff --git a/display.rs b/display.rs new file mode 100644 index 0000000..69b7fc0 --- /dev/null +++ b/display.rs @@ -0,0 +1,71 @@ +use std::fmt; //Import `fmt` + +//A structure holding two numbers. `Debug` will be derived so the results can +//be contrasted with `Display`. +#[derive(Debug)] +struct MinMax(i64, i64); +//Implement `Display` for `MinMax`. +impl fmt::Display for MinMax{ + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result{ + //Use `self.number` to refer to each positional data point. + write!(f, "({}, {})", self.0, self.1) + } +} + +//Define a structure where the fields are nameable for comparison. +#[derive(Debug)] +struct Point2D{ + x: f64, + y: f64, +} +//Similarly, implement `Display` for `Point2D` +impl fmt::Display for Point2D{ + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result{ + //Customize so only `x` and `y` are denoted. + write!(f, "x: {}, y: {}", self.x, self.y) + } +} + +//Define a structure for complex numbers +#[derive(Debug)] +struct Complex{ + real: f64, + imag: f64, +} +//Implement 'Display' for Complex +impl fmt::Display for Complex{ + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result{ + write!(f, "{} + {}i", self.real, self.imag) + } +} + +fn main(){ + let minmax = MinMax(0, 14); + + println!("Compare structures:"); + println!("Display: {}", minmax); + println!("Debug: {:?}", minmax); + + let big_range = MinMax(-300, 300); + let small_range = MinMax(-3, 3); + + println!("The big range is {big} and the small is {small}", + small = small_range, + big = big_range); + + let point = Point2D { x: 3.3, y: 7.2 }; + + println!("Compare points:"); + println!("Display: {}", point); + println!("Debug: {:?}", point); + + //Error. Both `Debug` and `Display` were implemented, but `{:b}` + //requires `fmt::Binary` to be implemented. This will not work. + //println!("What does Point2D look like in binary: {:b}?", point); + + //Print a test for Complex + let comp = Complex{real: 3.3, imag: 7.2}; + println!("Compare Complex:"); + println!("Display: {}", comp); + println!("debug: {:?}", comp); +}