Below you will find pages that utilize the taxonomy term “trait”
November 28, 2023
Rust中与闭包相关的三个trait
"在 Rust 中,闭包就是一种能捕获 上下文环境变量 的函数。\nlet range = 0..10; let get_range_count = || range.count(); 代码里的这个 get_range_count 就是闭包,range 是被这个闭包捕获的环境变量。\n虽然说它是一种函数,但是不通过 fn 进行定义。在 Rust 中,并不把这个闭包的类型处理成 fn 这种函数指针类型,而是有单独的类型定义。\n切记这里是将闭包处理成是 单独的类型定义,这一点区别与其它开发语言。\n至于按哪一种类型来处理,这个没有办法得知,因为只有在Rust编译器在编译的时候才可以确定其类型,并且在确定类型时,还需要根据这个闭包捕获上下文环境变量时的行为来确定。\n闭包trait分类 根据闭包行为划分为三类trait( 主因是受到所有权影响):\nFnOnce 适用于能被调用一次的闭包,所有闭包都至少实现了这个 trait,因为所有闭包都必须能够被调用。一个会将捕获的值移出闭包体的闭包只实现 FnOnce trait,这是因为它只能被调用一次。其获取了上下文环境变量的所有权。 FnMut 适用于不会将 …"