gpt4 book ai didi

rust - 闭包何时实现Fn,FnMut和FnOnce?

转载 作者:行者123 更新时间:2023-12-03 11:38:39 24 4
gpt4 key购买 nike

闭包实现FnFnMutFnOnce特性的具体条件是什么?

那是:

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

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

    最佳答案

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

  • FnOnce (self)是可以一次调用的函数
  • FnMut (&mut self)是可以访问其环境
  • &mut的函数
  • Fn (&self)是可以访问环境
  • 的函数,可以调用这些函数

    闭包 &将自动实现尽可能多的实现。
  • 所有闭包都实现|...| ...:不能一次调用的闭包不配名称。请注意,如果闭包仅实现FnOnce,则只能调用一次。
  • 不会移出捕获的闭包将实现FnOnce,从而可以多次调用它们(如果可以对函数对象进行非别名访问)。
  • 不需要唯一/可变访问其捕获的闭包将实现FnMut,从而使它们基本上可以在任何地方调用。

  • 这些限制直接取决于 Fn的类型和将闭包“解构”到结构中;在我的博客文章 Finding Closure in Rust中进行了介绍。

    有关闭包的信息,请参见The Rust Programming Language中的 Closures: Anonymous Functions that Can Capture Their Environment

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

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