Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 是否有比“处理”选项更好的解决方案;不能一次多次以可变方式借用";?_Rust - Fatal编程技术网

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
会保存
数组和新类型。