审查生成的事件总线

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

根据给定契约审查这段生成的单线程事件总线。

保持订阅者名称唯一,允许回调安全订阅,新变化从下一次发布生效,快照只克隆廉价句柄,并且不产生输出。

Rust
use std::cell::RefCell;
use std::rc::Rc;
#[derive(Clone)]
struct Handler {
    name: String,
    run: Rc<dyn Fn(&Bus)>,
}
struct Bus { handlers: RefCell<Vec<Handler>> }
impl Bus {
    fn subscribe(&self, handler: Handler) -> bool {
        self.handlers.borrow_mut().push(handler);
        true
    }
    fn publish(&self) {
        let snapshot = self.handlers.borrow().clone();
        let _exclusive = self.handlers.borrow_mut();
        for handler in snapshot {
            (handler.run)(self);
        }
        println!("published");
    }
}

生成代码仅作示例,不代表任何特定模型

在试验场中打开
报告错误