¿Cuáles son las condiciones específicas para un cierre que ejecute el Fn, FnMuty FnOncerasgos?
Es decir:
- ¿Cuándo un cierre no implementa el
FnOncerasgo? - ¿Cuándo un cierre no implementa el
FnMutrasgo? - ¿Cuándo un cierre no implementa el
Fnrasgo?
Por ejemplo, mutar el estado del cierre en su cuerpo hace que el compilador no implemente Fnen él.

Respuestas:
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 deself:FnOnce(self) son funciones que se pueden llamar una vezFnMut(&mut self) son funciones que se pueden llamar si tienen&mutacceso a su entornoFn(&self) son funciones que se pueden llamar si solo tienen&acceso a su entornoUn cierre
|...| ...implementará automáticamente tantos como sea posible.FnOnce: un cierre que no se puede llamar una vez no merece el nombre. Tenga en cuenta que si un cierre solo se implementaFnOnce, solo se puede llamar una vez.FnMut, lo que les permite ser llamados más de una vez (si hay acceso sin alias al objeto de función).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 .
fuente
FnOnce, ¿significa esto que solo se puede llamar una vez?FnOnce".