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拥有更新程序。没有想过使用包装器,当然这比不安全要好,但它仍然很难看。这意味着我需要一个“公共”更新对象和一个“私有”更新对象。然而,如果我想允许自定义更新程序的外部实现,我将不得不公开这两个。。。这是一个好主意,但我不得不花这么长的时间来实现这样一个简单的事情,这是一个令人沮丧的问题。谢谢我没想过用包装纸,当然总比不安全的好,但还是很难看。这意味着我需要一个“公共”更新对象和一个“私有”更新对象。然而,如果我想允许自定义更新程序的外部实现,我将不得不公开这两个。。。这是一个好主意,但我不得不花这么长的时间来实现这样一个简单的事情,这是一个令人沮丧的问题。谢谢