Rust闭包类型
闭包是一种匿名函数,它可以赋值给变量也可以作为参数传递给其他函数,不同于函数的是,它允许捕获调用者作用域的值。
在Rust中闭包是具有类型的。Rust使用三种Fn Trait作为闭包类型。
根据闭包捕获变量的三种途径,恰好对应函数参数的三种传入方式:
转移所有权
可变借用
不可变借用
因此对应了三种Fn Trait
FnOnce。顾名思义,该类型闭包会拿走捕获变量的所有权,该闭包只能运行一次。FnMut,它以可变借用的方式捕获了环境中的值Fn,它以不可变借用的方式捕获环境中的值。
具体来讲,一个闭包实现了哪种Fn Trait取决于该闭包如何使用被捕获的变量,而不是取决于闭包如何使用他们。
在实际使用闭包过程中,如果不将其作为参数传递,或一种具体类型,其实无需关注闭包类型,只需要写闭包即可。
三种Fn的关系
实际上,一个闭包并不仅仅实现某一种 Fn 特征,规则如下:
所有的闭包都自动实现了
FnOnce特征,因此任何一个闭包都至少可以被调用一次没有移出所捕获变量的所有权的闭包自动实现了
FnMut特征不需要对捕获变量进行改变的闭包自动实现了
Fn特征
最后更新于
这有帮助吗?