Hi every one, I'm not very new to rust, but I still feel confused with borrow check. The code is really simple below:
struct CPU<'a, 'b> {
reg: Vec<u8>,
read_callback: Box<dyn 'a + Fn(u8) -> u8>,
write_callback: Box<dyn 'b + FnMut(u8, u8)>
}
struct Memory {
ram: Vec<u8>
}
fn main() {
let mut mem = Memory {ram: vec![0; 256]};
let mut cpu = CPU {
reg: vec![0; 4],
read_callback: Box::new(|address| {mem.ram[address as usize]}),
write_callback: Box::new(|address, data| {mem.ram[address as usize] = data;})
};
cpu.read_callback.as_ref()(1);
cpu.write_callback.as_mut()(1,1);
}
surely the error is: cannot borrow mem
as mutable because it is also borrowed as immutable
I wonder how can I make the code runable?