首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >闭包什么时候实现Fn、FnMut和FnOnce?

闭包什么时候实现Fn、FnMut和FnOnce?
EN

Stack Overflow用户
提问于 2015-05-12 04:49:37
回答 1查看 31.7K关注 0票数 159

闭包实现FnFnMutFnOnce特征的特定条件是什么?

这就是:

  • 闭包何时不实现FnOnce特征?
  • 何时闭包不实现FnMut特征?
  • 闭包何时不实现Fn特征?

例如,在闭包的主体上改变闭包的状态会使编译器无法在其上实现Fn

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-14 16:15:36

每个特征都代表了越来越多的关于闭包/函数的限制性属性,由它们的call_...方法的签名来指示,特别是self的类型

  • FnOnce ( once
  • FnMut )是可以被称为environment
  • Fn (self)的函数(&mut self)是如果他们对其environment
  • Fn (&self)具有&访问权限就可以调用的函数是如果他们只有对其环境(

)具有访问权限就可以调用的函数

closure |...| ...将自动实现尽可能多的这些。

  • 所有闭包都实现了FnOnce:一个不能被调用一次的闭包不配这个名字。请注意,如果一个闭包只实现FnOnce,那么它只能被调用没有移出其捕获实现FnMut的once.
  • Closures,允许它们被多次调用(如果存在对函数object).
  • Closures的无别名访问,这些函数不需要对其捕获实现Fn的唯一/可变访问,从而允许它们基本上在任何地方被调用。

这些限制直接来自于self的类型和将闭包“去格式化”成结构;在我的博客文章中描述了这些限制。

有关闭包的信息,请参阅Rust编程语言中的Closures: Anonymous Functions that Can Capture Their Environment

票数 169
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30177395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档