Cada uma das características representa propriedades cada vez mais restritivas sobre fechamentos / funções, indicadas pelas assinaturas de seu call_...
método e, particularmente, o tipo de self
:
FnOnce
( self
) são funções que podem ser chamadas uma vez
FnMut
( &mut self
) são funções que podem ser chamadas se eles tiverem &mut
acesso ao seu ambiente
Fn
( &self
) são funções que podem ser chamadas se eles só tiverem &
acesso ao seu ambiente
Um fechamento |...| ...
implementará automaticamente tantos deles quanto puder.
- Todos os encerramentos implementam
FnOnce
: um encerramento que não pode ser chamado uma vez não merece o nome. Observe que, se uma closure implementa apenas FnOnce
, ela pode ser chamada apenas uma vez.
- Fechamentos que não saem de suas capturas são implementados
FnMut
, permitindo que sejam chamados mais de uma vez (se houver acesso sem alias ao objeto de função).
- Fechamentos que não precisam de acesso exclusivo / mutável para implementar suas capturas
Fn
, permitindo que sejam chamados essencialmente em qualquer lugar.
Essas restrições decorrem diretamente do tipo self
e da "remoção" dos fechamentos em estruturas; descrito em minha postagem do blog Finding Closure in Rust .
Para obter informações sobre fechamentos, consulte Fechamentos: funções anônimas que podem capturar seu ambiente na linguagem de programação Rust .