深入理解闭包的环境捕获(不可变借用、可变借用与 move 所有权获取),探究三大 Fn Trait 的自动推导与闭包作为函数参数。

1. 闭包的三种捕获模式

  • FnOnce:消耗捕获的变量(通过移动所有权),只能被调用一次。
  • FnMut:可以修改捕获的变量值。
  • Fn:仅不可变借用外部环境变量。
let list = vec![1, 2, 3];
// move 关键字强制闭包获取 list 的所有权(常用于跨线程传递)
let takes_ownership = move || println!("{:?}", list);
takes_ownership();