Rust 的闭包

闭包的基础知识

技术
技术Rust编程语言特性函数闭包

2026-03-29

在 Rust 中,闭包(closure)被设计为一种匿名函数,它可以赋值给变量也可以作为参数传递给其它函数,不同于函数的是,它允许捕获调用者作用域中的值。

三个核心特征

闭包与其捕获环境的交互方式,决定了它会实现以下三类闭包特征中的哪一类:FnOnceFnMutFn。这些特性规定了闭包是消耗(获取所有权)、修改(可变借用)还是仅读取(不可变借用)其环境中的值。

闭包将在定义时根据函数体中对捕获值的操作来决定使用哪种交互方式。

如果一个闭包实现了 FnMut 特征,那么它必定也实现了 FnOnce;如果一个闭包实现了 Fn 特征,那么它必定也实现了 FnMut

这也就意味着,如果一个函数的泛型参数有 FnOnce 的特征约束,那么一个 FnMutFn 闭包也可以作为参数传入。同理,Fn 闭包也可以传入有 FnMut 特征约束的参数。

即使闭包体不严格需要所有权(比如 FnMutFn 闭包),如果希望强制闭包获取它在环境中所使用的值的所有权,可以在参数列表前使用 move 关键字。

参考资料