Now that we know a bit about traits and generics, let's dive into trait bounds. Trait bounds allow you to specify that a generic type must implement a particular trait. This ensures that only types with certain capabilities can be used with your generic code.
For example:
std::fmt::Display
trait for printing.PartialOrd
for comparison.Trait bounds make your code flexible while maintaining strong type safety.
You can specify trait bounds in two ways:
Inline: Specify the trait bounds after the impl
or fn
keyword.
Where clause: Use a where
clause to specify trait bounds.
This means that the generic type T
must implement both Trait1
and Trait2
.
Define a generic function compare_and_display
that:
Display
trait.PartialOrd
trait.Use trait bounds to ensure the function works only with types that implement both Display
and PartialOrd
.
If you're stuck, here are some hints to help you solve the challenge:
std::cmp::PartialOrd
to compare values.std::fmt::Display
to print values with the println!
macro.T: Trait1 + Trait2
or using a where
clause. e.g.