Rust 如何更新结构,将大多数但不是所有字段设置为默认值?

Rust 如何更新结构,将大多数但不是所有字段设置为默认值?,rust,Rust,我知道伟大的锈迹特征: Foo { fieldX: someValue, ..Self::default() } 我想在方法中使用此选项,使用&mut self,不接触字段f10和f11,并将其他字段设置为默认值: #[derive(Default)] struct Foo { f1: u32, //... f10: Vec<u32>, f11: Vec<u32>, } impl Foo { fn f1(&

我知道伟大的锈迹特征:

Foo {
    fieldX: someValue,
    ..Self::default()
}
我想在方法中使用此选项,使用
&mut self
,不接触字段
f10
f11
,并将其他字段设置为默认值:

#[derive(Default)]
struct Foo {
    f1: u32,
    //...
    f10: Vec<u32>,
    f11: Vec<u32>,
}

impl Foo {
    fn f1(&mut self) {
        let new_me = Foo {
            f10: self.f10,
            ..Self::default()
        };
        *self = new_me;
    }
}
我怎样才能:

  • 将f1的签名保持原样:
    &mut self
  • 不复制任何
    Vec
    ,仅移动
  • 不要写无聊的代码,比如

    self.f1 = 0;
    self.f2 = 0;
    self.f3 = None;
    // ...
    

  • 我将用默认值替换整个
    self
    ,然后保留前一个值中的感兴趣字段:

    use std::mem;
    
    impl Foo {
        fn f1(&mut self) {
            let old = mem::replace(self, Self::default());
            self.f10 = old.f10;
        }
    }