Default トレイト

Default トレイトは、型のデフォルト値を生成します。

#[derive(Debug, Default)]
struct Derived {
    x: u32,
    y: String,
    z: Implemented,
}

#[derive(Debug)]
struct Implemented(String);

impl Default for Implemented {
    fn default() -> Self {
        Self("John Smith".into())
    }
}

fn main() {
    let default_struct = Derived::default();
    println!("{default_struct:#?}");

    let almost_default_struct =
        Derived { y: "Y is set!".into(), ..Derived::default() };
    println!("{almost_default_struct:#?}");

    let nothing: Option<Derived> = None;
    println!("{:#?}", nothing.unwrap_or_default());
}
This slide should take about 5 minutes.
  • 直接実装することも、#[derive(Default)] で導出することもできます。
  • 導出による実装では、すべてのフィールドがデフォルト値に設定された値が生成されます。
    • つまり、構造体内のすべての型にも Default を実装する必要があります。
  • 標準の Rust 型は多くの場合、妥当な値(0"" など)の Default を実装します。
  • 部分的な構造体の初期化は、デフォルトで適切に機能します。
  • Rust 標準ライブラリは、型が Default を実装できることを認識しており、それを使用するコンビニエンス メソッドを提供しています。
  • .. 構文は、構造体更新記法と呼ばれています。