找出回调在订阅另一个回调时可能 panic 的原因。
Rust
use std::cell::RefCell;
use std::rc::Rc;
struct Registry {
callbacks: RefCell<Vec<Rc<dyn Fn(&Registry)>>>,
}
impl Registry {
fn subscribe(&self, callback: Rc<dyn Fn(&Registry)>) {
self.callbacks.borrow_mut().push(callback);
}
fn notify(&self) {
for callback in self.callbacks.borrow().iter() {
callback(self);
}
}
}