Cada uno de los rasgos representa propiedades cada vez más restrictivas sobre cierres / funciones, indicadas por las firmas de su call_...método, y particularmente el tipo de self:
FnOnce( self) son funciones que se pueden llamar una vez
FnMut( &mut self) son funciones que se pueden llamar si tienen &mutacceso a su entorno
Fn( &self) son funciones que se pueden llamar si solo tienen &acceso a su entorno
Un cierre |...| ...implementará automáticamente tantos como sea posible.
- Todos los cierres se implementan
FnOnce: un cierre que no se puede llamar una vez no merece el nombre. Tenga en cuenta que si un cierre solo se implementa FnOnce, solo se puede llamar una vez.
- Los cierres que no se mueven fuera de sus capturas se implementan
FnMut, lo que les permite ser llamados más de una vez (si hay acceso sin alias al objeto de función).
- Los cierres que no necesitan acceso único / mutable a sus capturas se implementan
Fn, lo que les permite ser llamados esencialmente en todas partes.
Estas restricciones se derivan directamente del tipo selfy del "desugaring" de los cierres en estructuras; descrito en la publicación de mi blog Finding Closure in Rust .
Para obtener información sobre cierres, consulte Cierres: funciones anónimas que pueden capturar su entorno en el lenguaje de programación Rust .