关闭实施Fn
,FnMut
和FnOnce
特征的特定条件是什么?
那是:
FnOnce
特征?FnMut
特征?Fn
特征?例如,在它的主体上改变闭包的状态会使编译器不在其上实现Fn
。
答案 0 :(得分:93)
每个特征代表关于闭包/函数的越来越多的限制性属性,由call_...
方法的签名表示,特别是self
的类型:
FnOnce
(self
)是可以调用一次的函数,FnMut
(&mut self
)是可以在&mut
访问其环境的情况下调用的函数Fn
(&self
)是只有&
访问其环境才能调用的函数。封闭|...| ...
将自动实现尽可能多的封锁。
FnOnce
:一个不能被调用的闭包不值得这个名字。请注意,如果闭包仅实现FnOnce
,则只能调用一次。FnMut
,允许多次调用它们(如果存在对函数对象的单方面访问权限)。Fn
,允许它们在任何地方被调用。这些限制直接来自self
和" desugaring"的类型。封闭成结构(在Finding Closure in Rust中描述)。
有关2017年Rust关闭的信息,请参阅the Closures chapter in the Rust book。