输入函数
由于闭包可以用作参数,您可能会想知道函数是否也可以这样做。答案是肯定的!如果您声明一个将闭包作为参数的函数,那么任何满足该闭包特征约束的函数都可以作为参数传递。
// Define a function which takes a generic `F` argument // bounded by `Fn`, and calls it fn call_me<F: Fn()>(f: F) { f(); } // Define a wrapper function satisfying the `Fn` bound fn function() { println!("I'm a function!"); } fn main() { // Define a closure satisfying the `Fn` bound let closure = || println!("I'm a closure!"); call_me(closure); call_me(function); }
另外需要注意的是,Fn
、FnMut
和 FnOnce
特征
规定了闭包如何从封闭作用域捕获变量。