Using Trait Bounds to Conditionally Implement Methods
Ta có thể implement 1 method có điều kiện cho bất kỳ type nào có implement một trait khác cụ thể. Ví dụ để dễ hiểu hơn dưới đây:
use std::fmt::Display; struct Pair<T> { x: T, y: T, } impl<T> Pair<T> { fn new(x: T, y: T) -> Self { Self { x, y } } } impl<T: Display + PartialOrd> Pair<T> { fn cmp_display(&self) { if self.x >= self.y { println!("The largest member is x = {}", self.x); } else { println!("The largest member is y = {}", self.y); } } }
impl<T> Pair<T>
implement function new
trả về kiểu dữ liệu Pair<T>
với T
là generic (bất kỳ kiểu dữ liệu nào.
impl<T: Display + PartialOrd> Pair<T>
implement function cmp_display
cho mọi generic T
với T
đã được implement Display + PartialOrd
trước đó rồi (do đó mới có thể sử dụng các behavior của
Display
(println!("{}")
) và PartialOrd
(>
, <
, ...) được.