我知道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(&mut self) {
let new_me = Foo {
f10: self.f10,
..Self::default()
};
*self = new_me;
}
}
但是编译器说:
error[E0507]: cannot move out of borrowed content
--> src/main.rs:12:18
|
12 | f10: self.f10,
| ^^^^ cannot move out of borrowed content
我怎么能:
f1
的签名:&mut self
Vec<>
,只移动不写无聊的代码,比如
self.f1 = 0;
self.f2 = 0;
self.f3 = None;
// ...
答案 0 :(得分:5)
我用默认值替换整个self
,然后保留上一个值中的有趣字段:
use std::mem;
impl Foo {
fn f1(&mut self) {
let old = mem::replace(self, Self::default());
self.f10 = old.f10;
}
}