闭包实现Fn
、FnMut
和FnOnce
特征的特定条件是什么?
这就是:
FnOnce
特征?FnMut
特征?Fn
特征?例如,在闭包的主体上改变闭包的状态会使编译器无法在其上实现Fn
。
发布于 2015-05-14 16:15:36
每个特征都代表了越来越多的关于闭包/函数的限制性属性,由它们的call_...
方法的签名来指示,特别是self
的类型
FnOnce
( onceFnMut
)是可以被称为environmentFn
(self
)的函数(&mut self
)是如果他们对其environmentFn
(&self
)具有&
访问权限就可以调用的函数是如果他们只有对其环境()具有访问权限就可以调用的函数
closure |...| ...
将自动实现尽可能多的这些。
FnOnce
:一个不能被调用一次的闭包不配这个名字。请注意,如果一个闭包只实现FnOnce
,那么它只能被调用没有移出其捕获实现FnMut
的once.Fn
的唯一/可变访问,从而允许它们基本上在任何地方被调用。这些限制直接来自于self
的类型和将闭包“去格式化”成结构;在我的博客文章中描述了这些限制。
有关闭包的信息,请参阅Rust编程语言中的Closures: Anonymous Functions that Can Capture Their Environment。
https://stackoverflow.com/questions/30177395
复制相似问题