Deriving
Traitهای پشتیبانیشده میتوانند بهطور خودکار برای تایپهای سفارشی شما پیادهسازی شوند، به شرح زیر:
#[derive(Debug, Clone, Default)] struct Player { name: String, strength: u8, hit_points: u8, } fn main() { let p1 = Player::default(); // Default trait adds `default` constructor. let mut p2 = p1.clone(); // Clone trait adds `clone` method. p2.name = String::from("dog"); // Debug trait adds support for printing with `{:?}`. println!("{:?} vs. {:?}", p1, p2); }
This slide should take about 3 minutes.
انتساب (Derivation) با استفاده از ماکروها پیادهسازی میشود و بسیاری از crateها ماکروهای مفیدی برای اضافه کردن قابلیتهای کاربردی ارائه میدهند. به عنوان مثال، serde
میتواند پشتیبانی از ترتیب را برای یک ساختار با استفاده از [derive(Serialize)]#
فراهم کند.