找出回调注册表里的 bug

来自 Cell 与 RefCell
Rust 1.98 高级 4分钟 找出 1处问题

找出回调在订阅另一个回调时可能 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);
        }
    }
}
在试验场中打开
报告错误