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());
}
  • 這可以直接實作,也可以透過 #[derive(Default)] 衍生得出。
  • A derived implementation will produce a value where all fields are set to their default values.
    • 也就是說,該結構體中的所有型別也都必須實作 Default
  • 標準的 Rust 型別通常會以合理的值 (例如 0"" 等等) 實作 Default
  • 部分結構體副本可與預設值完美搭配運作。
  • Rust 標準程式庫瞭解型別可能會實作 Default,因此提供了便利的使用方式。
  • .. 語法稱為結構體更新語法