2015-08-17 6 views
7

Sto provando a chiamare la chiusura che è stata salvata all'interno di una struttura ma vorrei anche passare la struct come argomento alla chiusura. Ecco il codice specifico.Impossibile passare l'auto come parametro di callback a causa del doppio prestito

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

Nota che l'auto è un Button e self.click_callback è un Option<Box<Fn(&mut Button)>>

Quindi, da quello che ho capito il "se lasciare che" prende in prestito auto fino a quando i suoi scopi finisce, ma poi quando cerco di trasmettere di sé come un argomento tenta di prenderlo in prestito di nuovo. C'è qualcosa di specifico che posso fare per evitare questo doppio tentativo di prestito?

risposta

8

La soluzione più semplice è quello di rompere la richiamata dalla self, in questo modo:

let callback = self.click_callback.take(); 
if let Some(ref mut c) = callback { 
    c(self); 
} 
self.click_callback = callback; 
self 

Questo sostituisce temporaneamente click_callback con None, quindi, perché bisogna mettere indietro quando il gioco è fatto.

Problemi correlati