FnOnce ">FnOnce FnMutFn闭包是rust的语法糖,rust会根据此生成对应的结构体,并对于是否捕获环境变量,是否修改环境变量,生成对应的fn/fnonce/fnmut的函数指针。 如果没有任何捕获变量,实现Fnonce。如果由捕获变量,并且会对变量进行修改,则实现fnmut。如果有捕获变量,并且不会对捕获变量进行修改,则实现fn。 编译器会把fnonce当成fn(T)函数指针去看待。fn/fnmut/fnonce这三者trait的关系是依次继承。他们正好对应于所有权三件套。 FnOnce —> FnMut Fn