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