入力関数
クロージャは引数として使用できるため、関数についても同じことが言えるのではないかと思うかもしれません。 そして実際、その通りです!クロージャをパラメータとして受け取る関数を宣言した場合、 そのクロージャのトレイト境界を満たす任意の関数をパラメータとして渡すことができます。
// ジェネリックな `F` 引数を取り、`Fn` で境界付けして、 // それを呼び出す関数を定義する fn call_me<F: Fn()>(f: F) { f(); } // `Fn` 境界を満たすラッパー関数を定義する fn function() { println!("I'm a function!"); } fn main() { // `Fn` 境界を満たすクロージャを定義する let closure = || println!("I'm a closure!"); call_me(closure); call_me(function); }
補足として、Fn、FnMut、および FnOnce traits は、 クロージャが外側のスコープから変数をどのようにキャプチャするかを規定します。