Когда закрытие реализует Fn, FnMut и FnOnce?
что такое особые условия для закрытия для реализации Fn,FnMut и FnOnce признаков?
что есть:
- когда происходит закрытие не реализовать
FnOnceчерта? - когда происходит закрытие не реализовать
FnMutчерта? - когда происходит закрытие не реализовать
Fnчерта?
например, мутации состояние закрытия на его теле делает компилятор не реализовать Fn на нем.
1 ответ:
каждый признак представляет собой все более и более ограничительные свойства о замыканиях / функциях, обозначенные сигнатурами их
call_...метод, и особенно типself:
FnOnce(self) - это функции, которые могут быть вызваны один раз,FnMut(&mut self) являются функции, которые могут быть вызваны, если они имеют&mutдоступ к их средеFn(&self) функции, которые все еще могут быть вызваны, если они только есть&доступ к их среде.закрытие
|...| ...будет автоматически реализовывать столько из них, сколько он может.
- все заслоны реализации
FnOnce: закрытие, которое не может быть вызвано один раз, не заслуживает имени. Обратите внимание, что если закрытие только реализуетFnOnce, его можно вызвать только один раз.- замыкания, которые не выходят из своих захватов, реализуют
FnMut, позволяя им вызываться более одного раза (если есть unaliased доступ к объекту функции).- замыкания, которые не нуждаются в уникальном / изменяемом доступе к их захватам, реализуют
Fn, что позволяет им называться практически везде.эти ограничения вытекают непосредственно из типа
selfи "результате обессахаривания" блокад в структуры (как описано в найти закрытие в ржавчине).для получения информации о закрытиях в Rust по состоянию на 2017 год см. закрытие глава в книге ржавчины.
Comments