在 Rust 中,Fn
、FnMut
和 FnOnce
是三个用于表示闭包类型的 trait。闭包是一种可以捕获其环境变量的函数。在创建闭包是会默认实现这几个 trait 中的一个。
以下是三个 trait 的区别:
-
Fn:
Fn
是最基本的闭包 trait。它表示闭包可以捕获其环境变量的不可变引用。 -
FnMut:
FnMut
表示闭包可以捕获其环境变量的可变引用。这意味着闭包可以修改其环境变量的值。 -
FnOnce:
FnOnce
表示闭包只能调用一次。它表示闭包可以捕获其环境变量的所有权。这意味着闭包可以移动其环境变量的值。
以下是三个 trait 的一些示例:
// Fn
let add_one_closure = |x: i32| -> i32 {
let y = 10;
x + y
};
// FnMut
let add_two_closure = |mut x: i32|