4.6 `Default` 与结构体更新语法

06-Default 与结构体更新语法 — Comprehensive Rust

译文 · 基于 Comprehensive Rust

原文链接: https://google.github.io/comprehensive-rust/std-traits/default.html

4.6 Default 与结构体更新语法

Default trait 为类型产生一个默认值。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// Copyright 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。
  • 部分结构体初始化与 default 配合得很好。
  • Rust 标准库知道类型可以实现 Default,并提供使用它的便捷方法。
  • .. 语法称为结构体更新语法。
最后修改 August 11, 2026: 更新 (70a5af133)