pub struct Notifier<'a, T> {
callbacks: Vec<Box<'a + FnMut(&T)>>
}
impl<'a, T> Notifier<'a, T>{
fn add_callback<F: 'a + FnMut(&T)>(&mut self, callback: F) {
self.callbacks.push(Box::new(callback));
}
fn trigger(&mut self, payload: T) {
for callback in &mut self.callbacks {
callback(&payload);
}
}
}
struct A {
x: i64
}
impl A {
fn foo(&mut self, x: &i64) {
self.x = x + 1;
}
}
fn test() {
let mut bar = A {x: 3};
let mut notifier = Notifier{callbacks: Vec::new()};
notifier.add_callback(|x| bar.foo(x));
}
Playgroundself.callbacksにself immutablyを借りることはできますか:Vec <Box<FnMut>>?
これは、コールバックを使用して実装され、単純なオブザーバーパターンです。できます。
しかし、trigger(&mut self...
が私の後のコーディング(How to update self based on reference of value from hashmap from self)に大きな問題を引き起こすという事実。代わりにtrigger(&self ...
を作ることはできますか?
私はrustc 1.19.0を毎晩使用しています。
[遊び場(https://play.rust-lang.org/?gist=2ee39c72c43c8cd196b5a65666e1ac89&version=nightly&backtrace=0) – red75prime