Rust 闭包


// 闭包不能自动推倒生命周期?

  • 对于内建的类型,都实现了 Copy 的 trait,那么闭包执行的是 "借用"
  • 对于没有实现 Copy 的 trait,在闭包中可以调用其方法,是"借用",但是不能当成返回值,当成返回值了就是"移动"

不用于暴露给外部,所以不要求像 fn 函数那样在参数和返回值上注明类型
Rust 的闭包是可以保存进变量或作为参数传递给其他函数的匿名函数
// 匿名函数不同于普通函数,匿名函数允许捕获调用者作用域中的值
每一个闭包实例有其自己独有的匿名类型:也就是说,即便两个闭包有着相同的签名,他们的类型仍然可以被认为是不同 // 所以标记闭包时需要使用泛型和 trait bound

闭包可以通过三种方式(trait)捕获其环境:
  • FnOnce 消费从周围作用域捕获的变量,闭包周围的作用域被称为其 环境environment。为了消费捕获到的变量,闭包必须获取其所有权并在定义闭包时将其移动进闭包。其名称的 Once 部分代表了闭包不能多次获取相同变量的所有权的事实,所以它只能被调用一次。
  • FnMut 获取可变的借用值所以可以改变其环境
  • Fn 从其环境获取不可变的借用
强制闭包获取其使用的环境值的所有权,可以在参数列表前使用 move 关键字