假设有这样的结构B
:
struct A {
/* ... */
}
struct B {
a: A,
b: u32,
c: i8,
/* ... */
z: usize
}
A
没有Default
实现,也没有有意义的默认值。假设b..z
全部需要初始化为默认值(在这种情况下为0),并且A
初始化为某个运行时值。它可能看起来像这样:
let b = B {
a: some_a(), b: 0, c: 0, /* ... */ z: 0,
};
显然,这不理想。更糟糕的是,如果将aa
添加到该结构中,则需要在初始化程序中添加另一个成员。使用..Default::default()
无效,因为B
没有实现Default
,因为默认情况下,任何A
都太昂贵了,以至于计算起来都无法简单地丢弃。此外,无论如何,我在Default
实现中都需要一个非常长的结构初始化程序。
是否有办法在不写出所有成员名称的情况下将其余结构成员设置为其默认值(以便将b
设置为默认值u32
?
编辑:最好,添加新成员时,结构初始化程序需要进行最小的更改。这意味着这不理想:
let b = B {
a: some_a(),
b: Default::default(),
/* ... */
z: Default::default(),
};