Rust 如何为泛型结构实现默认值?

Rust 如何为泛型结构实现默认值?,rust,Rust,我有一个通用结构,希望提供一个具体的默认实现,该实现还允许用户覆盖默认字段的值,但会出现编译错误: struct MyStruct<A, B, C> { pub a: A, pub b: B, pub c: C, } impl<A, B, C> MyStruct<A, B, C> where A: Trait1, B: Trait2, C: Trait3, { pub fn foo() {} } tr

我有一个通用结构,希望提供一个具体的默认实现,该实现还允许用户覆盖默认字段的值,但会出现编译错误:

struct MyStruct<A, B, C> {
    pub a: A,
    pub b: B,
    pub c: C,
}

impl<A, B, C> MyStruct<A, B, C>
where
    A: Trait1,
    B: Trait2,
    C: Trait3,
{
    pub fn foo() {}
}

trait Trait1 {}
trait Trait2 {}
trait Trait3 {}
现在我想实现
Default
,它还允许在必要时使用不同的值覆盖特定字段(允许部分默认值?)。不确定语法:

impl Default for MyStruct<SomeA, SomeB, SomeC> {
    fn default() -> Self {
        ...
    }
}
MyStruct的impl默认值{ fn default()->Self{ ... } }

如果
A
B
C
全部实现
默认值,则只需实现
默认值即可:

MyStruct的impl Default,其中A:Default,B:Default,C:Default{ fn default()->Self{ 自我{ a:a::default(), b:b::default(), c:c::default(), } } }
我不明白。A、 B、C是特征。如何在泛型特征上实现默认值?
其中a:default
对编译器说:“如果
a
是实现
default
的类型,那么对于
MyStruct
,只实现
default
。因此如果您试图调用
MyStruct::default()
如果
A
没有实现
Default
,你会得到一个编译错误,但是如果你在
A
实现
Default
的地方这样做,编译器会发现这个实现并且很高兴。值得指出的是,这正是
#[派生(默认)]
将提供给您,因此如果您不需要任何特殊的内容,您可能应该使用
派生
而不是手动实现它。我不完全确定“覆盖默认字段的值”是什么意思“
Default::Default
不接受任何参数,因此您无法传入任何内容,但由于
MyStruct
的所有字段都是
pub
的,因此您可以使用不太知名的字段,如
MyStruct{a:SomeA(),…Default::Default()}
。如果您给出一个示例,说明如何使用此“部分默认值”,这会有所帮助。是关于结构更新语法的问题,我以前找不到链接
impl Default for MyStruct<SomeA, SomeB, SomeC> {
    fn default() -> Self {
        ...
    }
}