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 {
...
}
}