Rust 是否有比“处理”选项更好的解决方案;不能一次多次以可变方式借用";?
我有结构Rust 是否有比“处理”选项更好的解决方案;不能一次多次以可变方式借用";?,rust,Rust,我有结构Foo和BarFoo包含一个Bar数组和一个对Bar进行操作的私有方法: pub struct Bar; pub struct Foo { bars: [Bar; 10], } impl Foo { pub fn process_all(&mut self) { for bar in self.bars.iter_mut() { self.process_single(bar); } }
Foo
和Bar
Foo
包含一个Bar
数组和一个对Bar
进行操作的私有方法:
pub struct Bar;
pub struct Foo {
bars: [Bar; 10],
}
impl Foo {
pub fn process_all(&mut self) {
for bar in self.bars.iter_mut() {
self.process_single(bar);
}
}
fn process_single(&mut self, bar: &mut Bar) {
// ...
}
}
这不起作用,因为不能同时借用self
及其包含的一个条
error[E0499]:不能一次多次借用“*self”作为可变项
在我的例子中,解决这个问题的一种方法是使用选项
。然后,我可以在函数中获得数组的所有权,然后在流程完成后将其返回给结构:
pub结构栏;
pub struct Foo{
酒吧:选择,
}
impl-Foo{
发布fn流程(全部(&M自我){
设bar=self.bar.take().unwrap();
酒吧里的酒吧{
自加工单(巴);
}
self.bar=一些(条);
}
fn流程\单个(&mut自我,条形图:&mut条形图){
// ...
}
}
这感觉很粗糙;有更好的方法吗?Niko写了一篇关于这个和类似情况的文章。你有理由在
过程中使用self
(或除条形图以外的任何可变部分)吗?如果不是,你可以。@SvenMarnach这确实是一篇关于同样问题的好文章。@DenysSéguret我知道,因为事实上我的Foo有更多的数据。我想我在OOP解决方案中做得有点过分了…TL;复制:制作更多的结构。将process\u single
移动到包含其工作所需内容、不包含任何Bar
的结构,然后将Bar
传递给它。然后你的Foo
持有Bar
数组和新类型。Niko写了一篇关于这种情况和类似情况的文章。你有理由在过程中使用self
(或除Bar以外的任何可变部分)吗?如果不是,你可以。@SvenMarnach这确实是一篇关于同样问题的好文章。@DenysSéguret我知道,因为事实上我的Foo有更多的数据。我想我在OOP解决方案中做得有点过分了…TL;复制:制作更多的结构。将process\u single
移动到包含其工作所需内容、不包含任何Bar
的结构,然后将Bar
传递给它。然后,您的Foo
会保存条
数组和新类型。