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,并提供使用它的便捷方法。 .. 语法称为结构体更新语法。