由于双重借用,无法将self作为回调参数传递

Ste*_*nts 7 rust

我正在尝试调用保存在结构中的闭包,但我也想将结构作为参数传递给闭包.这是特定的代码段.

pub fn react(&mut self) -> &mut Button {
   if let Some(ref mut c) = self.click_callback {
            c(self);
    }
    self
}
Run Code Online (Sandbox Code Playgroud)

请注意,自我是一个Button而且self.click_callback是一个Option<Box<Fn(&mut Button)>>

所以根据我的理解,"if let"借用自己直到它的范围结束,但是当我试图将自我作为一个论证时,它试图再次借用它.我能做些什么可以避免这种双重借用尝试吗?

DK.*_*DK. 8

最简单的解决方案是打破回调self,如下所示:

let callback = self.click_callback.take();
if let Some(ref mut c) = callback {
    c(self);
}
self.click_callback = callback;
self
Run Code Online (Sandbox Code Playgroud)

这将暂时取代click_callbackNone,因此为什么你必须把它回来时,你就大功告成了.