Rust 让孩子修改父母

Rust 让孩子修改父母,rust,Rust,我想让一个子结构修改它的父结构。 例如: 我确信这可以用不安全的块来完成,但是有替代方法吗? 也许我的代码不是惯用的?之所以出现“已借用”错误,是因为您试图将更新程序传递给其更新方法两次,一次作为自我,一次嵌入更新对象。出于内存安全考虑,Rust不允许这样做 最简单的解决方案是向update传递对updateee中需要更新的字段的引用,而不是整个updateee: impl Updater { fn update(&mut self, updatee_value: &mu

我想让一个子结构修改它的父结构。 例如:

我确信这可以用不安全的块来完成,但是有替代方法吗?

也许我的代码不是惯用的?

之所以出现“已借用”错误,是因为您试图将
更新程序
传递给其
更新
方法两次,一次作为
自我
,一次嵌入
更新对象
。出于内存安全考虑,Rust不允许这样做

最简单的解决方案是向
update
传递对
updateee
中需要更新的字段的引用,而不是整个
updateee

impl Updater {
    fn update(&mut self, updatee_value: &mut u64) {
        self.value = self.value + 1;
        *updatee_value = self.value;
    }
}

如果需要更新多个字段,
updateee
可以被转换为
更新程序
的包装器和另一个保存字段和实际数据的结构,可以安全地传递给
update

您获得“已借用”的原因错误是因为您试图将
更新程序
传递给其
更新
方法两次,一次作为
自我
,一次嵌入
更新对象
。出于内存安全考虑,Rust不允许这样做

最简单的解决方案是向
update
传递对
updateee
中需要更新的字段的引用,而不是整个
updateee

impl Updater {
    fn update(&mut self, updatee_value: &mut u64) {
        self.value = self.value + 1;
        *updatee_value = self.value;
    }
}

如果需要更新多个字段,
updateee
可以被转换为
更新程序
的包装器和另一个保存字段和实际数据的结构,可以安全地传递到
update
self.Updater.update(self)您甚至不需要这样做。Rust从函数式编程中获得了很多灵感,我认为即使在像Java这样的面向对象语言中,你也不希望有这种设计。为什么你需要updater在updatee中。还有。。。您需要使用显式生命周期。。。对于这样的设置。1)我需要更新程序位于更新对象内部,因为我对它们进行迭代并调用
updatee.update()
方法。他们更新“自己”,但我需要更新机制(更新程序)是可交换的,即一些更新对象有不同的更新策略。2) 我认为您不需要使用生命周期,因为updatee拥有更新程序。
self.updater.update(self)您甚至不需要这样做。Rust从函数式编程中获得了很多灵感,我认为即使在像Java这样的面向对象语言中,你也不希望有这种设计。为什么你需要updater在updatee中。还有。。。您需要使用显式生命周期。。。对于这样的设置。1)我需要更新程序位于更新对象内部,因为我对它们进行迭代并调用
updatee.update()
方法。他们更新“自己”,但我需要更新机制(更新程序)是可交换的,即一些更新对象有不同的更新策略。2) 我认为你不需要一生的时间,因为updatee拥有更新程序。没有想过使用包装器,当然这比不安全要好,但它仍然很难看。这意味着我需要一个“公共”更新对象和一个“私有”更新对象。然而,如果我想允许自定义更新程序的外部实现,我将不得不公开这两个。。。这是一个好主意,但我不得不花这么长的时间来实现这样一个简单的事情,这是一个令人沮丧的问题。谢谢我没想过用包装纸,当然总比不安全的好,但还是很难看。这意味着我需要一个“公共”更新对象和一个“私有”更新对象。然而,如果我想允许自定义更新程序的外部实现,我将不得不公开这两个。。。这是一个好主意,但我不得不花这么长的时间来实现这样一个简单的事情,这是一个令人沮丧的问题。谢谢