gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 07:39:57 28 4
gpt4 key购买 nike

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

即:

  • 什么时候闭包实现FnOnce trait?
  • 什么时候闭包实现FnMut trait?
  • 什么时候闭包实现Fn trait?

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

最佳答案

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

  • FnOnce (self) 是可以调用一次的函数
  • FnMut (&mut self) 是可以被调用的函数,如果他们有 &mut 访问他们的环境
  • Fn (&self) 是只有&访问其环境的权限时可以调用的函数

闭包|...| ... 将自动实现尽可能多的功能。

  • 所有闭包都实现了FnOnce:不能调用一次的闭包名不副实。请注意,如果闭包仅实现 FnOnce,则它只能被调用一次。
  • 不移出它们的捕获的闭包实现 FnMut,允许它们被多次调用(如果有对函数对象的非别名访问)。
  • 不需要唯一/可变访问其捕获的闭包实现 Fn,允许它们基本上在任何地方被调用。

这些限制直接来自 self 的类型和闭包“脱糖”到结构中;在我的博文中描述 Finding Closure in Rust .

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

关于rust - 闭包什么时候实现 Fn、FnMut 和 FnOnce?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30177395/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com