Auto Traits
Auto traits là các trait đánh dấu (marker trait) được tự động triển khai cho mọi kiểu dữ liệu,
trừ khi kiểu dữ liệu hoặc một kiểu dữ liệu mà nó chứa được khai báo tường minh là không impl bằng cách sử dụng negative_impls
.
Ta cần bật feature auto_traits
để khai báo auto trait.
#![allow(unused)] #![feature(auto_traits)] fn main() { auto trait Valid {} }
Sau đó, ta có thể triển khai trait Valid
cho các kiểu dữ liệu khác nhau:
#![feature(auto_traits)] #![feature(negative_impls)] auto trait Valid {} struct True; struct False; // Negative impl // Có nghĩa là Valid không được auto impl cho struct False impl !Valid for False {} // Nếu T được impl trait Valid, thì MaybeValid<T> cũng được impl trait Valid struct MaybeValid<T>(T); fn must_be_valid<T: Valid>(_t: T) { } fn main() { // Hoạt động must_be_valid(MaybeValid(True)); // Báo lỗi - do `False` không được impl trait Valid // must_be_valid(MaybeValid(False)); }
Auto trait Valid
, sẽ tự động impl cho mọi struct
, enum
, ...
References
- https://doc.rust-lang.org/beta/unstable-book/language-features/auto-traits.html