我有一个包含被调用的结构AppData
,Vec<Box<Updatable>>
其中objects
包含实现Updatable
具有以下功能的特征的结构:
fn update(&mut self, data: &mut AppData) {
//default implementation accesses and mutates AppData, including the internal `objects` Vec and possibly also objects inside it
}
该AppData
结构存储在具有以下功能data
的结构中的字段中:App
pub fn update(&mut self) {
for d in self.data.objects.iter(){
d.update(&mut self.data);
}
}
我不能这样做,因为Box<T>
它是不可变的。所以我尝试使用索引器:
for i in 0..self.data.objects.len() {
let ref mut d = self.data.objects[i];
d.update(&mut self.data);
}
但后来我得到
一次不能多次借用
self.data
mutable
那我该怎么办?我可能可以使用RefCell
etc 的组合来编译它,但我不确定它是否是惯用的 Rust。几种选择:
- 克隆
Vec
并迭代克隆。但我遇到了麻烦,因为Updateable
没有实现Sized
. - 使用
RefCell
而不是Box
. 我不确定我是否需要它,因为我没有存储对Vec
内部的引用,Updatables
但这可能没有什么不同?我想RefCell
应该Rc
在这种情况下使用,因为我想要可变引用?这也不能解决我的问题,因为我仍然需要以self.data
某种方式拥有所有权,对吧? self.data
在解构后取得所有权,self
然后在我们完成后将其放回自我。我怎么做?
提前致谢!