Derivando
Os traits suportados podem ser implementados automaticamente para seus tipos personalizados, como segue:
#[derive(Debug, Clone, Default)] struct Player { name: String, strength: u8, hit_points: u8, } fn main() { let p1 = Player::default(); // O _trait_ `Default` adiciona um construtor `default`. let mut p2 = p1.clone(); // O _trait_ `Clone` adiciona um método `clone`. p2.name = String::from("EldurScrollz"); // O _trait_ `Debug` adiciona suporte para impressão com `{:?}`. println!("{:?} vs. {:?}", p1, p2); }
This slide should take about 3 minutes.
A derivação Ă© implementada com macros e muitas crates fornecem macros de derivação Ășteis para adicionar funcionalidades Ășteis. Por exemplo, serde
pode derivar suporte de serialização para uma struct usando #[derive(Serialize)]
.