Rust by Example中文

8.2.4 Input functions

Since closures are possible as arguments, you might wonder if functions are possible as well. Indeed they are! The previously mentioned Fn, FnMut, and FnOnce traits all dictate in what fashion a closure captures variables from the enclosing scope. Because a function can never capture variables, closures are strictly more flexible. Therefore, any function which can take a closure as an argument can also take a function.

// A function which takes a closure as an argument and calls it. fn call_function<F: Fn()>(f: F) { f() } fn print() { println!("I'm a function! I can be used like a closure.") } fn main() { let closure = || println!("I'm a closure!"); call_function(closure); call_function(print); }

See also:

Fn, FnMut, and FnOnce