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 &mut
acceso 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 self
y 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 .