導出

サポートされているトレイトは、次のようにカスタム型に自動的に実装できます。

#[derive(Debug, Clone, Default)]
struct Player {
    name: String,
    strength: u8,
    hit_points: u8,
}

fn main() {
    let p1 = Player::default(); // デフォルト トレイトで `default` コンストラクタを追加します。
    let mut p2 = p1.clone(); // クローン トレイトで `clone` メソッドを追加します。
    p2.name = String::from("EldurScrollz");
    // デバッグ トレイトで、`{:?}` を使用した出力のサポートを追加します。
    println!("{p1:?} vs. {p2:?}");
}
This slide should take about 3 minutes.

導出はマクロで実装され、多くのクレートには有用な機能を追加するための便利な導出マクロが用意されています。たとえば、serde#[derive(Serialize)] を使用して、構造体のシリアル化のサポートを導出できます。