I'm trying to call closure that was saved inside a struct but I'd also like to pass the struct as an argument to the closure. Here's the specific piece of code.
pub fn react(&mut self) -> &mut Button {
if let Some(ref mut c) = self.click_callback {
c(self);
}
self
}
Note that self is a Button
and self.click_callback
is an Option<Box<Fn(&mut Button)>>
So from what I understand the "if let" borrows self until its scopes ends, but then when I try to pass self as an argument it attempts to borrow it again. Is there anything specific I can do that will avoid this double borrow attempt?
The simplest solution is to break the callback out from self
, like so:
let callback = self.click_callback.take();
if let Some(ref mut c) = callback {
c(self);
}
self.click_callback = callback;
self
This temporarily replaces click_callback
with None
, hence why you have to put it back when you're done.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With