我有一个具有Vec字段且无法实现的结构Copy:
#[derive(Clone, Debug)]
struct MyStruct {
field: Vec<i32>,
}
impl MyStruct {
fn new () -> MyStruct {
MyStruct {
field: vec![1, 2],
}
}
fn overwrite(&mut self, strt: MyStruct) {
self.field = strt.field;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我想在我的代码中多次使用它,我clone()每次都必须使用它:
fn main() {
let mut s = MyStruct::new();
let s2 = MyStruct::new();
s.overwrite(s2.clone());
println!("{:?}", s2);
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,但这是完成此任务的最佳方式吗?还有其他更惯用的方法吗?
让我们回顾一下我们的数据处理故事:
&和不借用&mut,在此期间以有限的方式借用)就您而言,您应该在这里使用借用。
fn overwrite(&mut self, strt: &MyStruct) {
// ^
self.field = strt.field.clone();
}
fn main() {
let mut s = MyStruct::new();
let s2 = MyStruct::new();
s.overwrite(&s2);
// ^
println!("{:?}", s2);
}
Run Code Online (Sandbox Code Playgroud)
要深入了解这个概念,请阅读Rust Book。如果您来自垃圾收集语言背景,那么 4.7 到 4.10 章真的是必读的。