You are attempting to borrow a RefCell mutably while a previous borrow is still active. Fix this by ensuring the first borrow ends before the second begins, typically by dropping the first borrow or restructuring the logic to avoid nested borrows.
use std::cell::RefCell;
let data = RefCell::new(vec![1, 2, 3]);
// Correct: First borrow ends before the second starts
{
let mut borrow = data.borrow_mut();
borrow.push(4);
} // borrow dropped here
let mut borrow = data.borrow_mut();
borrow.push(5);
If you need to use the data twice in one scope, clone the value or split the operations so the borrow scope is limited:
let data = RefCell::new(vec![1, 2, 3]);
let mut borrow = data.borrow_mut();
borrow.push(4);
let len = borrow.len(); // Use data while borrowed
// borrow dropped here
let mut borrow = data.borrow_mut();
borrow.push(5);
Avoid this pattern which causes the error:
// ERROR: cannot borrow as mutable because it is already borrowed
let mut one = data.borrow_mut();
let mut two = data.borrow_mut(); // Panic at runtime
The key is to ensure borrow_mut() is called only when no other borrow exists.