衍生特徵
系統會自動為您的自訂型別實作支援的特徵,如下所示:
#[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("EldurScrollz"); // Debug trait adds support for printing with `{:?}`. println!("{:?} vs. {:?}", p1, p2); }
This slide should take about 3 minutes.
衍生會透過巨集實作,許多 Crate 都提供實用的衍生巨集,以便新增實用功能。例如,serde
可以使用 #[derive(Serialize)]
,為結構體衍生序列化支援。