Jakie są szczególne warunki dla zamknięcia do wdrożenia Fn
, FnMut
oraz FnOnce
cechy?
To jest:
- Kiedy zamknięcie nie realizuje
FnOnce
cechy? - Kiedy zamknięcie nie realizuje
FnMut
cechy? - Kiedy zamknięcie nie realizuje
Fn
cechy?
Na przykład mutacja stanu zamknięcia w jego treści powoduje, że kompilator nie implementuje Fn
go.
Odpowiedzi:
Każda z cech reprezentuje coraz bardziej restrykcyjne właściwości dotyczące domknięć / funkcji, na które wskazują sygnatury ich
call_...
metody, a zwłaszcza rodzajself
:FnOnce
(self
) to funkcje, które można wywołać razFnMut
(&mut self
) to funkcje, które można wywołać, jeśli mają&mut
dostęp do swojego środowiskaFn
(&self
) to funkcje, które można wywołać, jeśli mają&
dostęp tylko do swojego środowiskaZamknięcie
|...| ...
automatycznie zaimplementuje tak wiele z nich, jak to tylko możliwe.FnOnce
: zamknięcie, którego nie można wywołać raz, nie zasługuje na tę nazwę. Zwróć uwagę, że jeśli zamknięcie działa tylkoFnOnce
, można je wywołać tylko raz.FnMut
, umożliwiając wywoływanie ich więcej niż raz (jeśli istnieje dostęp bez uprawnień do obiektu funkcji).Fn
, dzięki czemu można je wywoływać praktycznie wszędzie.Ograniczenia te wynikają bezpośrednio z rodzaju
self
i „odcukrzenia” zamknięć w strukturach; opisane w moim wpisie na blogu Finding Closure in Rust .Aby uzyskać informacje na temat domknięć, zobacz Zamknięcia: anonimowe funkcje, które mogą uchwycić swoje środowisko w języku programowania Rust .
źródło
FnOnce
, czy to oznacza, że można je wywołać tylko raz?FnOnce
”.