我正在尝试修改暂时存储到另一个变量中的self
。在最后一步,我要将所有数据从变量复制到self
。
struct A {
x: i32,
}
impl A {
fn new() -> Self {
Self { x: 0 }
}
fn change(&mut self) {
let mut a = Self::new();
a.x += 1;
self = a; // How to copy data from a variable into self?
}
}
我得到了错误:
error[E0308]: mismatched types
--> src/lib.rs:14:16
|
14 | self = a; // How to copy data from a variable into self?
| ^
| |
| expected &mut A, found struct `A`
| help: consider mutably borrowing here: `&mut a`
|
= note: expected type `&mut A`
found type `A`
我尝试了self = &a
和self = &mut a
,但没有用。我应该如何在这一行中将数据从self
复制到a
?
我知道我的示例不是最佳示例,因为我可以只写self.x += 1
。在我的整个项目中,我对a
进行了艰苦的计算,其中包括self
本身,因此我需要严格在最后一行进行复制。
答案 0 :(得分:4)
您需要取消引用self
:
*self = a;
self
并没有什么独特之处,或者这是一种方法这一事实。对于替换值的任何可变引用也是如此。
另请参阅: