如何在一个方法中将一个结构的数据分配给自己?

时间:2019-02-05 21:26:30

标签: methods reference rust

我正在尝试修改暂时存储到另一个变量中的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 = &aself = &mut a,但没有用。我应该如何在这一行中将数​​据从self复制到a

我知道我的示例不是最佳示例,因为我可以只写self.x += 1。在我的整个项目中,我对a进行了艰苦的计算,其中包括self本身,因此我需要严格在最后一行进行复制。

1 个答案:

答案 0 :(得分:4)

您需要取消引用self

*self = a;

self并没有什么独特之处,或者这是一种方法这一事实。对于替换值的任何可变引用也是如此。

另请参阅: