Quelles sont les conditions spécifiques d’une fermeture pour mettre en œuvre les traits Fn
, FnMut
et FnOnce
?
C’est:
FnOnce
? FnMut
? Fn
? Par exemple, si vous modifiez l’état de la fermeture sur son corps, le compilateur n’y implémentera pas Fn
.
Les traits représentent chacun des propriétés de plus en plus ressortingctives sur les fermetures / fonctions, indiquées par les signatures de leur méthode d’ call_...
, et en particulier du type de self
:
FnOnce
( self
) sont des fonctions qui peuvent être appelées une fois, FnMut
( &mut self
) sont des fonctions qui peuvent être appelées si elles ont un access &mut
à leur environnement Fn
( &self
) sont des fonctions qui peuvent encore être appelées si elles ne disposent que d’un access à leur environnement. Une fermeture |...| ...
|...| ...
implémentera automatiquement autant que possible.
FnOnce
: une fermeture qui ne peut être appelée une seule fois ne mérite pas le nom. Notez que si une fermeture implémente uniquement FnOnce
, elle ne peut être appelée qu’une seule fois. FnMut
, ce qui leur permet d’être appelées plusieurs fois (si l’access à l’object fonction n’est pas correct). Fn
, leur permettant d’être appelées pratiquement partout. Ces ressortingctions découlent directement du type de self
et du “désuétude” des fermetures dans les structures (décrit dans la section Recherche de fermetures dans Rust ).
Pour plus d’informations sur les fermetures dans Rust à partir de 2017, reportez-vous au chapitre Fermetures du livre Rust .