2015-07-02 8 views

risposta

5

Il miglior riferimento per questo è l'eccellente post del blog Finding Closure in Rust. Citerò la parte saliente:

Ci sono tre tratti, e così sette insiemi non vuoti di tratti che potrebbero essere implementate ... ma c'è in realtà solo tre configurazioni interessanti:

  • Fn, FnMut e FnOnce,
  • FnMut e FnOnce,
  • solo FnOnce.

Perché? Ebbene, i tre tratti di chiusura sono in realtà tre set nidificati: ogni chiusura che implementa Fn può anche implementare FnMut (se &self works, &mut self funziona anche, la prova: &*self), e allo stesso modo ogni chiusura di attuazione FnMut possono anche implementare FnOnce. Questa gerarchia viene applicata a livello di tipo

+0

Questo è quello che sospettavo ... – Kapichu

+0

ho deciso di usare 'IndexMut' invece di' FnMut' per il mio compito, però, credo di aver trovato un errore? Causa, per le funzioni, c'è ('FnOnce'), (' FnOnce', 'FnMut'), (' FnOnce', 'FnMut',' Fn'). Bene, capito. Ma per 'Index'es è: (' Index'), ('Index',' IndexMut'). Questo è il contrario e un errore credo, dal momento che, quando implemento la versione mutevole, devo anche avere la versione immutabile, che non funzionerà ... (Dovrei aprire una nuova domanda per questo o questo commento è sufficiente?) – Kapichu

+0

@Kapichu mi sembra una domanda diversa. Nello specifico perché voglio chiederti cosa intendi con "che non funzionerà". Scommetto che garantisce uno snippet di codice, il che significa che probabilmente è un'altra domanda. Altre domande sono buone - risultati di ricerca a grana più fine per le persone future. – Shepmaster

Problemi correlati