Default トレイト

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

// 著作権 2023 Google LLC
// SPDX-License-Identifier: Apache-2.0

#[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();
    dbg!(default_struct);

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

    let nothing: Option<Derived> = None;
    dbg!(nothing.unwrap_or_default());
}
  • これは直接実装することも、#[derive(Default)] で導出することもできます。
  • 導出された実装は、すべてのフィールドがそれぞれのデフォルト値に設定された値を生成します。
    • これは、構造体内のすべての型も Default を実装している必要があることを意味します。
  • Rust の標準ライブラリの型の多くは、妥当な値(例: 0"" など)で Default を実装しています。
  • 構造体の部分初期化は、デフォルト値と組み合わせるとうまく機能します。
  • Rust 標準ライブラリは、型が Default を実装できることを考慮しており、それを利用する便利なメソッドを提供しています。
  • .. 構文は 構造体更新構文 と呼ばれます。