我正在用 Rust 实现一个事件系统,它必须:
Event1
的监听器存储在全局向量中:
static mut EVENT1_LISTENERS: Vec<Box<dyn FnMut()>> = Vec::new();
Box<dyn FnMut()>
在这里支持可变状态的听众,就像这个:
let mut counter = 0;
unsafe {
EVENT1_LISTENERS.push(move || {
counter += 1;
println!("event1 has happend {} times", counter);
});
}
你会如何删除这个设计的监听器? 如果不可能,那么我该如何更改设计以支持删除听众?
我试过像这样使用
retain
:
unsafe {
EVENT1_LISTENERS
.retain(|f| f.as_ref() as *const _ != &remove_f as &dyn FnMut() as *const _);
}
其中
remove_f
是我要删除的功能