我需要遍历 Rc RefCell 中结构的一个字段,并根据其其他字段修改它的一些参数。例如对于结构 Foo:
pub struct Foo {
pub foo1: Vec<bool>,
pub foo2: Vec<i32>,
}
以下代码恐慌:
fn main() {
let foo_cell = Rc::new(RefCell::new(Foo { foo1: vec![true, false], foo2: vec![1, 2] }));
foo_cell.borrow_mut().foo2.iter_mut().enumerate().for_each(|(idx, foo2)| {
if foo_cell.borrow().foo1[idx] {
*foo2 *= -1;
}
});
}
我可以通过在可变借用之前克隆 foo1 并仅在闭包内使用克隆来解决它,但这会导致不必要的复制。事实上,我基本上需要一个对 foo2 的可变引用和一个对 foo1 的不可变引用(请注意,这是简化的代码,此处无法压缩迭代器)。我知道代码不符合借用规则。有没有办法在不克隆数据的情况下让它工作?