Кожні ознаки представляють все більш і більш обмежуючі властивості щодо закриттів / функцій, що позначаються підписами їх call_...
методу, зокрема типом self
:
FnOnce
( self
) - це функції, які можна викликати один раз
FnMut
( &mut self
) - це функції, які можна викликати, якщо вони мають &mut
доступ до свого оточення
Fn
( &self
) - це функції, які можна викликати, якщо вони мають лише &
доступ до свого оточення
Закриття |...| ...
автоматично реалізує стільки, скільки можливо.
- Усі закриття реалізують
FnOnce
: закриття, яке не можна викликати один раз, не заслуговує назви. Зауважте, що якщо закриття реалізується лише FnOnce
воно, його можна викликати лише один раз.
- Закриття, яке не рухається зі своїх знімань, реалізовує
FnMut
, дозволяючи викликати їх не раз (якщо є недостовірний доступ до об'єкта функції).
- Замикання, які не потребують унікального / змінного доступу до своїх знімальних програм
Fn
, дозволяють викликати їх по суті всюди.
Ці обмеження випливають безпосередньо з типу self
та "знебарвлення" закриттів у конструкції; описаний у моєму дописі в блозі Пошук закриття в Іржі .
Інформацію про закриття див. У розділі Закриття: Анонімні функції, які можуть зафіксувати їхнє середовище мовою програмування іржі .