Когда закрытие реализует Fn, FnMut и FnOnce?



что такое особые условия для закрытия для реализации Fn,FnMut и FnOnce признаков?



что есть:




  • когда происходит закрытие не реализовать FnOnce черта?

  • когда происходит закрытие не реализовать FnMut черта?

  • когда происходит закрытие не реализовать Fn черта?


например, мутации состояние закрытия на его теле делает компилятор не реализовать Fn на нем.

404   1  

1 ответ:

каждый признак представляет собой все более и более ограничительные свойства о замыканиях / функциях, обозначенные сигнатурами их call_... метод, и особенно тип self:

  • FnOnce (self) - это функции, которые могут быть вызваны один раз,
  • FnMut (&mut self) являются функции, которые могут быть вызваны, если они имеют &mut доступ к их среде
  • Fn (&self) функции, которые все еще могут быть вызваны, если они только есть & доступ к их среде.

закрытие |...| ... будет автоматически реализовывать столько из них, сколько он может.

  • все заслоны реализации FnOnce: закрытие, которое не может быть вызвано один раз, не заслуживает имени. Обратите внимание, что если закрытие только реализует FnOnce, его можно вызвать только один раз.
  • замыкания, которые не выходят из своих захватов, реализуют FnMut, позволяя им вызываться более одного раза (если есть unaliased доступ к объекту функции).
  • замыкания, которые не нуждаются в уникальном / изменяемом доступе к их захватам, реализуют Fn, что позволяет им называться практически везде.

эти ограничения вытекают непосредственно из типа self и "результате обессахаривания" блокад в структуры (как описано в найти закрытие в ржавчине).

для получения информации о закрытиях в Rust по состоянию на 2017 год см. закрытие глава в книге ржавчины.

Comments

    Ничего не найдено.