У меня есть кусок кода, который должен работать со списком.Этот список содержит элементы из другого источника, которые необходимо обработать и в конечном итоге удалить.Список также передается нескольким функциям, которые решают, добавлять или удалять элемент.Я создал пример кода, который отражает мою проблему:
use std::{cell::RefCell, rc::Rc};
pub fn foo() {
let list: Rc<RefCell<Vec<Rc<RefCell<String>>>>> = Rc::new(RefCell::new(Vec::new()));
list.borrow_mut()
.push(Rc::new(RefCell::new(String::from("ABC"))));
while list.borrow().len() > 0 {
let list_ref = list.borrow();
let first_item = list_ref[0].borrow_mut();
//item processing, needed as mutable
list.borrow_mut().remove(0);
}
}
Эта паника во время выполнения:
thread 'main' panicked at 'already borrowed: BorrowMutError', src/libcore/result.rs:997:5
Мне кажется, я понимаю проблему: у меня есть два неизменных заимствования, а затем третье, котороеизменчивоСогласно документам Rust, это недопустимо: либо много неизменных заимствований, либо одно изменяемое.Есть ли способ обойти эту проблему?