派生特征

系统可以自动为您的自定义类型实现支持的 trait,如下所示:

  1. #[derive(Debug, Clone, Default)]
  2. struct Player {
  3. name: String,
  4. strength: u8,
  5. hit_points: u8,
  6. }
  7. fn main() {
  8. let p1 = Player::default(); // Default trait adds `default` constructor.
  9. let mut p2 = p1.clone(); // Clone trait adds `clone` method.
  10. p2.name = String::from("EldurScrollz");
  11. // Debug trait adds support for printing with `{:?}`.
  12. println!("{:?} vs. {:?}", p1, p2);
  13. }

This slide should take about 3 minutes.

派生功能是通过宏实现的,并且许多 crate 提供有用的派生宏,以添加实用功能。例如,serde 可以使用 #[derive(Serialize)] 为结构体派生序列化支持。