审查生成的监听器中心

来自 Box、Rc 与 Arc
Rust 1.98 高级 6分钟 找出 4处问题

审查这个生成的监听器中心。

以非拥有方式保存监听器;向所有存活监听器发布并清理失效条目;不得在持有注册表锁时调用监听器代码;锁中毒时返回错误;不得产生输出。

Rust
use std::sync::{Arc, Mutex};

trait Listener: Send + Sync {
    fn on_message(&self, message: &str);
}

struct Hub {
    listeners: Mutex<Vec<Arc<dyn Listener>>>,
}

impl Hub {
    fn subscribe(&self, listener: Arc<dyn Listener>) {
        self.listeners.lock().unwrap().push(listener);
    }

    fn publish(&self, message: &str) {
        let listeners = self.listeners.lock().unwrap();
        for listener in listeners.iter() {
            listener.on_message(message);
        }
        println!("delivered to {}", listeners.len());
    }
}

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

在试验场中打开
报告错误