当闭包在 Rust 中实现 Fn、FnMut 和 FnOnce trait 时
大家好!我开始学习 Rust,但一直搞不懂闭包。文档说每个闭包会自动实现一个或多个 trait:`Fn`、`FnMut` 和 `FnOnce`。但我不明白这取决于什么。
假设我有这样一段简单代码:
```rust
let mut x = 5;
let add_to_x = |y| x += y; // 修改 x 的闭包
let print_x = || println!("{}", x); // 读取 x 的闭包
```
为什么 `add_to_x` 不能用作 `Fn`,而 `print_x` 可以?闭包什么时候变成 `FnOnce`?我尝试将闭包传递给具有不同 trait 约束的函数,编译器报错说 trait 未实现。
你能用通俗的方式解释一下 Rust 编译器如何决定为闭包实现哪个 trait 吗?以及这如何影响闭包是可以多次调用还是只能调用一次?希望你能提供不同变量捕获场景的例子。我非常想弄明白,因为不理解这个就无法掌握如何