rust 如何将结构体上的属性更改为包含旧值的新值?

v9tzhpje  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(153)

如何将结构体上的属性更改为包含旧值的新值?

struct Container {
    more: Box<Container>
}

struct ContainerBox {
    container: Option<Container>
}

impl ContainerBox {
    pub fn ingest(&mut self, container: Container) {
        match &self.container {
            Some(container) => {
                self.container = Some(Container { more: (*container).clone() }); // this doesn't look right.
            },
            None => self.container = Some(container)
        };
    }
}

字符串
这是一个非常愚蠢的例子,但它抓住了重点。我有一个结构体,它拥有一些数据,这些数据可能是一些东西,也可能什么都不是,当它是一些东西时,我需要用一个相同类型的新示例来替换它,该示例由该结构体属性中的旧值组成。
我想我明白为什么借用检查员不高兴,但我也看不到其他的方式来写这个。

k5ifujac

k5ifujac1#

可以使用Option::take()

impl ContainerBox {
    pub fn ingest(&mut self, container: Container) {
        match self.container.take() {
            Some(container) => {
                self.container = Some(Container { more: Box::new(container) });
            },
            None => self.container = Some(container),
        };
    }
}

字符串

相关问题