Is there any difference between these two approaches? The both seem to work fine.
use core::fmt::Debug;
#[derive(Debug)]
struct Point2D {
x: f64,
y: f64
}
impl ToString for Point2D {
fn to_string(&self) -> String {
format!("({}, {})", self.x, self.y)
}
}
// Approach #1: fn print_string(label: &str, value: &dyn ToString) {
// Approach #2: fn print_string<T: ToString>(label: &str, value: &T) {
fn print_string(label: &str, value: &dyn ToString) { // using approach #1 here
println!("{}: {}", label, value.to_string());
}
fn main() {
print_string("Name", &"Mark"); // Name: Mark
print_string("Score", &19); // Score: 19
let pt = Point2D { x: 1.2, y: 3.4 };
print_string("Point", &pt); // Point: (1.2, 3.4)
}
Output:
Name: Mark
Score: 19
Point: (1.2, 3.4)
Errors:
Compiling playground v0.0.1 (/playground)
Finished dev [unoptimized + debuginfo] target(s) in 0.89s
Running `target/debug/playground`