Testcase: empty bounds
Bộ kiểm thử: ràng buộc rỗng
Theo cách các ràng buộc (bounds) hoạt động thì là ngay cả khi một trait
không bao gồm bất cứ hàm nào, ta vẫn có thể sử dụng nó như một ràng buộc.
Eq
và Copy
là những ví dụ của các trait
như vậy từ thư viện std
.
struct Cardinal; struct BlueJay; struct Turkey; trait Red {} trait Blue {} impl Red for Cardinal {} impl Blue for BlueJay {} // Những hàm này chỉ hợp lệ với các kiểu dữ liệu đã triển khai các trait này. // Thực tế là dù trait không có bất kì hàm nào cũng chẳng sao. fn red<T: Red>(_: &T) -> &'static str { "red" } fn blue<T: Blue>(_: &T) -> &'static str { "blue" } fn main() { let cardinal = Cardinal; let blue_jay = BlueJay; let _turkey = Turkey; // Hàm `red()` không hoạt động với kiểu blue_jay // và ngược lại bởi các ràng buộc (bounds). println!("Chim hồng y giáo chủ có màu {}", red(&cardinal)); println!("Chim giẻ cùi làm có màu {}", blue(&blue_jay)); //println!("Gà tây có màu {}", red(&_turkey)); // ^ TODO: Hãy thử bỏ comment dòng trên. }